zoukankan      html  css  js  c++  java
  • ThinkPHP3快速入门教程三:查询语言

    一、查询语言简介:

     

    ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取、更新和删除等操作,主要涉及到where方法等连贯相关方法操作即可,

    此框架查询系统可以解决不同数据库的差异性,因些我们把框架的这一查询方式称之为查询语言。使其查询操作更加简单易懂。

     

    二、查询方式:

    ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。

     

    1、使用字符串作为查询条件(最传统的方式,但是安全性不高),例如:

    $User = M(“User”); //实例化User对象

    $User -> where(‘type=1 AND status=1’) -> select();

    生成SQL语句:SELECT *FORM think_user WHERE type=1 AND status=1;

    注意:采用字符串查询的时候,我们可以配合使用新版提供的字符串条件的安全预处理机制。

    2、使用数组作为查询条件

    这种方式是最常用的查询方式,例如:

    $User M(“User”); //实例化User对象

    $condition[‘name’] =’thinkphp’;

    $condition[‘status’] = 1;

    //把查询条件传入查询方法

    $user -> where($condition) -> select();

    //生成的SQL语句

    SELECT*FORM think_user WHERE ‘name’ = ‘thinkphp’ AND status=1;

    如果进行多字段查询,那么字段之间的默认逻辑关系是逻辑与AND,但是用下面的规则可以更改默认的逻辑判断,通过使用_logic定义查询逻辑:

    $User = M(“user”); //实例化User对象

    $condition[‘name’] = ‘thinkphp’;

    $condition[‘account’] = ‘thinkphp’;

    $condition[‘_logic’] = ‘OR’;

    //把查询条件传入查询方法

    $User -> Where($condition)->select();

    生成的SQL语句:SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp';

     

    3、使用对象方式来查询

    这里以stdClass内置对象为例:

    $User = M(“User”); //实例化User对象

    //定义查询条件

    $condition = new stdClass();

    $codition -> name= ’thinkphp’;

    $codition -> status = 1;

    $User -> where($condition) ->select();

    生成的SQL语句:SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

    使用对象方式和数组方式来查询数据是一样的,大多数情况下,建议使用数组方式更加高效。

     

    三、表达式查询:

    ThinkPHP查询语言的精髓,查询表达式的使用格式:

    $map[‘字段名’] = array(‘表达式’‘查询条件’);

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

     

    示例如下:

    EQ:等于(=)

    例如:

    $map[‘id’] = array(‘eq’,100);

    $map[‘id’] = 100;//和上面查询等效

    查询条件为:id=100

     

    NEQ:不等于(<>

    例如:

    $map[‘id’] = array(‘neq’,100);

    表示的查询条件就是id<>100

     

    GT:大于(>)

    例如:

    $map[‘id’] = array(‘gt’,100);

    表示查询条件就是id>100

     

    EGT:大于等于(>=)

    例如:

    $map[‘id’] = array(‘egt’,100);

    表示的查询条件就是id>=100

     

    LT:小于(<

    例如:

    $map[‘id’] = array(‘lt’,100);

    表示的查询条件就是id<100

     

    ELT: 小于等于(<=)

    例如:

    $map[‘id’] = array(‘elt’,100);

    表示的查询条件就是id<=100

     

    [NOT]LIKE:sqlLIKE

    例如:

    $map[‘name’] = array(‘like’,’thinkphp%’);

    查询条件:name like ‘thinkphp%’

     

    如果配置了DB_LIKE_FIEKLDS参数的话,某些字段也会自动进行模糊查询。例如设置了:

    ‘DB_LIKE_FIELDS’参数的话,某些字段也会自动进行模糊查询。例如设置了:

    ‘DB_LIKE_FIELDS’ => ‘title|content’;的话,使用$map[‘title’]=’thinkphp%’;

    查询条件就会变成title like ‘%thinkphp%’

     

    支持数组方式,例如:

    $map[‘a’] = array(‘like’,array(‘%thinkphp%’,’%tp’),’OR’);

    $map[‘b’] = array(‘notlike’,array(‘%thinkphp%’,’%tp’),’AND’);

    生成的查询条件:

    (a like ‘%thinkphp%’ OR a like ‘%tp’) AND (b not like ‘%thinkphp%’ AND like ‘%tp’)

     

    [NOT] BETWEEN : sql[not]between,查询条件支持字符串或者数组,例如:

    $map[‘id’] = array(‘between’,’1,8’);

    $map[‘id’] = array(‘between’,array(‘1’,’8’)); //和上行语句等效

    查询条件就变成id BETWEEN 1 AND 8

     

    [NOT]IN:同sql[NOT]in,查询条件支持字符串或者数组,例如:

    $map[‘id’] = array(‘not in’,’1,5,8’);

    $map[‘id’] = array(‘not in’,array(‘1’,’5’,’8’)); //和上条语句等效

    查询条件:id NOT IN(1,5,8)

     

    EXP:表达式,支持更复杂的查询情况

    例如:$map[‘id’] = array(‘in’,’1,3,8’);

    可改成:

    $map[‘id’] = array(‘exp’,’IN(1,3,8)’);

    Exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,

    包括使用函数和字段名称。查询表达式不仅可用于查询条件,也可以用于数据更新,例如:

    $User = M(“User”);   //实例化User对象

    //要修改的数据对象属性赋值

    $data[‘name’] = ‘ThinkPHP’;

    $data[‘score’] = array(‘exp’,’score+1’); //用户的积分加1

    $User->where(‘id=5’)->save($data); //根据条件保存修改的数据

     

    四、快捷查询:

    3.0版本开始,增加了快捷查询方式,可以进一步简化查询条件的写法,例如:

    1、实现不同字段相同的查询条件

    $User = M(“User”); //实例化User对象

    $map[‘name|title’] = ‘thinkphp’;

    //把查询条件传入查询方法

    $User->where($map)->select();

    查询条件:name= ’thinkphp’ OR title = ‘thinkphp’

     

    2、实现不同字段不同的查询条件

    $User = M(“user”); //实例化User对象

    $map[‘status&title’]=array(‘1’, ’thinkphp’, ’_multi’=>true);

    //把查询条件传入查询方法

    $User -> where($map) -> select();

    ‘_multi’ => true 必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成:status= 1 AND title= ’thinkphp’

    查询字段支持最多的,例如:

    $map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);

    查询条件变成:status= 1 AND score>0 AND title = ‘thinkphp’

     

    注意:快捷查询方式中”|”和”&”不能同时使用。

     

    五、区间查询:

    ThinkPHP支持对某个字段的区间查询,例如:

    $map[‘id’] = array(array(‘gt’,1),array(‘lt’,10));

    查询条件:

    (‘id’ >1) AND(‘id’<10)

    $map[‘id’] = array(array(‘gt’,3),array(‘lt’,10),’or’);

    查询条件:(‘id’>3)OR‘id’<10

    $map[‘id’] = array( array(‘neq’,6),array(‘gt’,3),’and’);

    查询条件:(‘id’ !=6)AND(‘id’>3)

    区间查询的条件可以支持普通查询的所有表达式,也就是说类似LIKEGTEXP这样的表达式都可以支持。

    另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:

    $map[‘name’] = array(array(‘like’,’%a%’),array(‘like’,’%b%’),array(%c%),’ThinkPHP’,’or’);

    查询条件:

    (‘name’ LIKE ‘%a%’)OR(‘name’ like ‘%b%’) OR (‘name’ like ‘%c%’) or(‘ThinkPHP’)

    六、组合查询:

    七、统计查询:

    八、SQL查询:

    九、动态查询:

    十、子查询:

    十一、总结:

  • 相关阅读:
    澳门两日游之续一
    记澳门两日游0516
    [原创]北大ACM POJ 1050题解
    [原创]百度之星低频词过滤题解
    [原创]百度之星题解之重叠区间大小
    澳门两日游之续三
    澳门两日游之续二
    [原创]LZW网页判重的题解
    [原创]北大ACM POJ 1032题解
    创建产品列表控件时触发自定义DataUpated事件时,设置MultiView.ActiveViewIndex无效
  • 原文地址:https://www.cnblogs.com/john-sr/p/6009695.html
Copyright © 2011-2022 走看看