博主信息
Peter_Zhu教学笔记
博文
24
粉丝
1235
评论
19
访问量
8441
积分:139
P豆:849.5

ThinkPHP5数据查询表达式生成技巧

2017年07月24日 16:05:16阅读数:559博客 / Peter_Zhu教学笔记 / ThinkPHP5基础

ThinkPHP5中的查询表达式大揭密

主要使用where(条件表达式)方法;

语法一:where('字段','条件','值');

  • 等于:EQ ,解析为"="

  • 不等于:NEQ, 解析为"<>"

  • 小于:LT ,解析为"<"

  • 小于等于:ELT,解析为"<="

  • 大于:GT,解析为">"

  • 大于等于:EGT,解析为">="

  • 区间:BETWEEN :解析为 "BETWEEN * AND *"

  • 不在区间: NOTBETWEEN :解析为 "NOTBETWEEN * AND *"

  • 集合:IN, 解析为: IN((* , *);

  • 不在集合中:NOTIN, 解析为:NOTIN(*, *)

  • 字段值为NULL 和 NOT NULL

//省略条件,默认为相等
$res = Db::table("staff")
      ->where("id",1010)  //等价于:where('id','=',1010)
      ->fetchSql(true)  //输出SQL语句,不执行后面***作
      ->select();
//完整的单值条件表达式
$res = Db::table("staff")
      ->where("id",'EGT',1010)  //等价于:where('id','>=',1010)
      ->fetchSql(true) 
      ->select();
      
//区间条件表达式
$res = Db::table("staff")
      ->where("age",'BETWEEN',[18, 35]) //between 18 and 35
      ->where("age",'NOT BETWEEN',[18, 35]) //between 18 and 35
      ->fetchSql(true) 
      ->select();
//集合条件表达式
$res = Db::table("staff")
      ->where("id",'IN',[2, 3, 5])  //in(2,3,5)
      ->where("id",'NOT IN',[2, 3, 5])  //not in(2,3,5)
      ->fetchSql(true) 
      ->select();
      
//null值判断,注意中间有"="号的区别
$res = Db::table("staff")
      ->where("salary",'NULL')  //salary IS NULL,该列无值
      ->where("salary",'=','NULL')  //salary = 0,字段值等于0
      ->fetchSql(true) 
      ->select();
//like 或者 not like
$res = Db::table("staff")
      ->where("name","LIKE", "%php")  //模糊匹配php结尾字段值name like %php
      ->where("name","NOT LIKE", "%php")
      ->where("salary",'=','NULL')  //salary = 0,字段值等于0
      ->fetchSql(true) 
      ->select();
//从ThinkPHP5.0.5+,like支持数组参数,参数之间的关系由最后一个参数给出:or 
where('name','like',['%think','php%'],'OR');
//SQL:SELECT * FROM `abc` WHERE  (`name` LIKE '%think' OR `name` LIKE 'php%')

语法二、where(['字段1'=>['条件1','值1'],  '字段2'=>['条件2','值2'],...])

说明::每个数组元素都是一个查询条件,使用where()方法时,每个条件之间为AND关系,使用whereOr()方法为OR

//AND
$res = Db::table("abc")
    ->where([
      "id"  =>  [">",10],
      "age" => ["BETWEEN",[18,22]]
    ])
    ->fetchSql(true)
    ->select();
//SQL:SELECT * FROM `abc` WHERE  `id` > 10  AND `age` BETWEEN 18 AND 22
//OR
$res = Db::table("abc")
    ->whereOr([
      "salary"  =>  ["EGT",3500],
      "age" => ["BETWEEN",[28,42]]
    ])
    ->fetchSql(true)
    ->select();
//SQL:SELECT * FROM `abc` WHERE  `salary` >= 3500  OR `age` BETWEEN 28 AND 42

语法三:where('字段',"EXP","条件表达式")

  • 生成条件表达式的终极***,如果以上都无法生成满足要求的查询条件,就要考虑用这个啦,支持字段函数

  • 条件表达式参数的语法与SQL语句中保持一致,就是说,你在SQL语句中怎么写,这里就怎么写

  • 最终生成的SQL时,会自动忽略掉EXP字符,直接将:字段与条件表达式进行拼接


//简单条件
$res = Db::table("staff")
     ->where("id","EXP",">=10")
     ->select();
//SQL:SELECT * FROM `staff` WHERE ( `id` >=10 )
//复合条件
$res = Db::table("staff")
    ->where("age","EXP","BETWEEN 20 AND 30 ")
    ->select();
//SQL:SELECT * FROM `staff` WHERE ( `age` BETWEEN 20 AND 30 )


语法四: where()和whereOr()链式调用生成AND或OR关系的查询表达式

$res =Db::table("staff")
         ->where("id","EXP",">=10")
         ->where("age",">",30)
         ->whereOr("dept","市场部")
         ->select();
//SQL:SELECT * FROM `staff` WHERE ( `id` >=10 ) AND `age` > 30 OR `dept` = '市场部'


全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
小皮
  • 小皮· 2017-07-27 15:01:153楼
  • 老猪人气很高

  • 回复
  • 代码输入中...
  • 代码输入中...· 2017-07-27 09:37:372楼
  • 原来是peter朱的博客呀,我在官网上看了好多老师的视频,感谢老师的分享,支持一下,哈哈

  • 回复
  • ringa_lee
  • ringa_lee· 2017-07-24 17:49:071楼
  • 感谢老师的分享,收藏啦啦~

  • 回复