ThinkPHP5.0 查询条件where()使用

本文详细介绍ThinkPHP中数据库查询的各种方法,包括字符串条件、数组条件、表达式查询等,以及如何进行条件判断、模糊查询、区间查询等高级操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

where()指定条件

  • 链式操作中间方法,指定数据库操作条件 。最常用的方法
  • 参数传递方式(设定id等于10的条件)
    • 方式1,一个参数,字符串条件直接查询
    • 方式2,一个参数,字段名为键的关联数组where(array('id'=>array('eq',10)))
    • 方式3,二个参数,第一个为字段名,第二个参数为字段值where('id',10)
    • 方式4,三个参数,第一个为字段名,第二个为条件,第三个参数为值where('id','eq',10)
  • 返回影响行数
<?php
namespace app\index\controller;
use \think\Controller;
use \think\Db;
class Index extends Controller{
    public function index(){
        $data = array('name'=>'xiao1','create_time'=>time());
        $rel = db('data')->where(array('id'=>array('eq',10)))->update($data);//方式1
        $rel = db('data')->where('id',10)->update($data);//方式2
        $rel = db('data')->where('id','eq',10)->update($data);//方式3
        dump($rel);
    }
}

输出结果

int(1)

字符串条件

使用字符串条件直接查询操作

$rel1 = db('data')->where('id=15 and type=0')->select();//方式1

编译结果

SELECT * FROM `tp_data` WHERE ( id=15 and type=0 )

使用字符串条件+预处理机制一起使用

$rel1 = db('data')->where("id=:id and type=:type")->bind(['id'=>15,'type'=>0])->select();//方式1
$rel2 = db('data')->where("id=? and type=?")->bind([15,0])->select();//方式2
$rel3 = db('data')->where("id=:id and type=:type",array('id'=>$id,'type'=>$type))->select();//方式3
$rel4 = db('data')->where("id=? and type=?",array($id,$type))->select();//方式4

编译结果

SELECT * FROM `tp_data` WHERE ( id='15' and type='0' )

数组条件(tp官方推荐)

普通查询

$map = array(
            'id'=>15,
            'type'=>0,
        );
$rel1 = db('data')->where($map)->select();//方式1

编译结果

SELECT * FROM `tp_data` WHERE `id` = 15 AND `type` = 0

表达式查询

  • $map[‘字段1’] = array(‘表达式’,‘查询条件1’);
  • $map[‘字段2’] = array(‘表达式’,‘查询条件2’);
  • db(‘table’)->where($map)->select();
表达式含义

表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是

表达式含义
EQ等于(=)
NEQ不等于(<>)
GT大于(>)
EGT大于等于(>=)
LT小于(<)
ELT小于等于(<=)
LIKE模糊查询
[NOT] BETWEEN(不在)区间查询
[NOT] IN(不在)IN 查询
条件判断查询

示例1:查询id<10type=0的数据

$map = array(
            'id'=>array('lt',10),
            'type'=>array('eq',0),
        );
$rel1 = db('data')->where($map)->select();//方式1

编译结果

SELECT * FROM `tp_data` WHERE `id` < 10 AND `type` = 0 
模糊查询

示例2:查询name like %xiao%

$map = array(
            'name'=>array('like','%xiao%'),
        );
$rel1 = db('data')->where($map)->select();//方式1

编译结果

SELECT * FROM `tp_data` WHERE `name` LIKE '%xiao%' 

示例3:查询name like %xiao% or name like %rufeike%

$map = array(
            'name'=>array('like',array('%xiao%','%rufeike%'),'OR'),
        );
$rel1 = db('data')->where($map)->select();//方式1

编译结果

SELECT * FROM `tp_data` WHERE (`name` LIKE '%xiao%' OR `name` LIKE '%rufeike%')
[not] between查询
$map = array(
            'id'=>array('between',array(1,2))//数组
        );
$rel1 = db('data')->where($map)->select();//方式1


$map = array(
            'id'=>array('between','1,2')//字符串
        );
$rel2 = db('data')->where($map)->select();//方式2

编译结果

SELECT * FROM `tp_data` WHERE `id` BETWEEN 1 AND 2
[not] in查询
$map = array(
            'id'=>array('in','1,2')
        );
$rel1 = db('data')->where($map)->select();//方式1

$map = array(
            'id'=>array('in',array(1,2))
        );
$rel2 = db('data')->where($map)->select();//方式2

编译结果

 SELECT * FROM `tp_data` WHERE `id` IN (1,2)

快速查询

不同字段相同条件的查询
//查询id=1 且 type = 1的数据
$map = array(
            'id&type'=>1
        );
$rel1 = db('data')->where($map)->select();//方式1
//查询id=1 或 type = 1的数据
$map = array(
            'id|type'=>1
        );
$rel1 = db('data')->where($map)->select();//方式1

编译结果

SELECT * FROM `tp_data` WHERE ( `id` = 1 AND `type` = 1 ) 
SELECT * FROM `tp_data` WHERE ( `id` = 1 OR `type` = 1 )

区间查询

同一字段,不同条件查询

示例1 id > 1 AND id < 10

$map = array(
            'id'=>array(array('gt',1),array('lt',10))
        );
$rel1 = db('data')->where($map)->select();//方式1

编译结果

 SELECT * FROM `tp_data` WHERE ( `id` > 1 AND `id` < 10 )

示例2 id < 10 OR id > 12

$map = array(
            'id'=>array(array('lt',10),array('gt',12),'OR')
        );
$rel1 = db('data')->where($map)->select();//方式1

编译结果

SELECT * FROM `tp_data` WHERE ( `id` < 10 OR `id` > 12 )

多次调用

  • where()方法可以多次调用
$map = array(
            'id'=>array('gt',5)
        );
        $map2 = array(
            'id'=>array('lt',15),
            'type'=>array('eq',0),
        );
$rel1 = db('data')->where($map)->where($map2)->select();//方式1

编译结果

 SELECT * FROM `tp_data` WHERE ( `id` > 5 AND `id` < 15 ) AND `type` = 0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值