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

文章目录

  • where()指定条件
    • 字符串条件
      • 使用字符串条件直接查询操作
      • 使用字符串条件+预处理机制一起使用
    • 数组条件(tp官方推荐)
      • 普通查询
      • 表达式查询
        • 表达式含义
        • 条件判断查询
        • 模糊查询
        • [not] between查询
        • [not] in查询
      • 快速查询
        • 不同字段相同条件的查询
      • 区间查询
        • 同一字段,不同条件查询
    • 多次调用

where()指定条件

  • 链式操作中间方法,指定数据库操作条件 。最常用的方法
  • 参数传递方式(设定id等于10的条件)
    • 方式1,一个参数,字符串条件直接查询
    • 方式2,一个参数,字段名为键的关联数组where(array('id'=>array('eq',10)))
    • 方式3,二个参数,第一个为字段名,第二个参数为字段值where('id',10)
    • 方式4,三个参数,第一个为字段名,第二个为条件,第三个参数为值where('id','eq',10)
  • 返回影响行数

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

你可能感兴趣的:(笔记,ThinkPHP5.0)