ThinkPHP教程_PHP框架之ThinkPHP(九)【查询语言】

一、概述

  1、ThinkPHP支持直接使用字符串作为查询条件,但是大多数情况下推荐使用索引数组对象来作为查询条件,因为更加安全!

  2、查询条件可以用于CURD等任何操作,作为where方法的参数传入即可,ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,下面来一一讲解查询语言的内涵。

  3、查询语言分为普通查询、区间查询、组合查询、复合查询、统计查询、定位查询、SQL查询、动态查询

二、普通查询

  查询条件可以为String、Array或Object类型

  1、字符串

  

  

  注意,如果连贯操作的方法采用String类型的参数,那么参数就得按照原生sql语句的写法。这里的"username='Tiger'"就验证了这句话,如果Tiger没有用''包起来,则会出错!

  2、数组(索引数组)

  

  

  3、对象

  

  

  4、不知道大伙有没有发现,以上关于参数Array和Object类型的两个例子只能做到了一个相等的查询条件,那么怎么通过Array或Object类型参数来实现更加复杂的查询条件呢(显然String类型参数是可以做到的,故不赘述)?即使用查询表达式。以Array类型为例,Object类型同理!$condition['字段名']=array('表达式','查询条件');即内层数组的第一个元素值表示表达式、第二个元素值表示查询条件。表达式不区分大小写

    ·eq(相等)

    

    

    ·neq(不等)

    ·gt(大于)

    ·egt(大于等于)

    ·lt(小于)

    ·elt(小于等于)

    ·like(同原生sql语句中的LIKE)

    可以进行模糊匹配

    

    

    在应用配置文件中可以配置DB_LIKE_FIELDS,那么被配置项匹配的字段将会自动进行模糊匹配。比如说$condition['username']='Tiger';相当于username like '%Tiger%'

    ·between/notbetween

    查询条件支持String或Array类型,即内层数组的第二个元素值可以是字符串或数组  

    

    

    ·in/notin

    查询条件同样支持String和Array类型

    

    

    ·exp

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

    查询条件是一个按照原生sql语句格式书写的完整的查询表达式(可以使用原生sql语句支持的语法,包括使用sql函数、字段等等)(额,似乎回到了where(字符串查询条件)),即内层数组的第二个元素值是一个完整的查询表达式

    查询条件只支持String类型

    

    

    其不仅可以用于查询表达式,还可以用于更新操作

    

三、区间查询

  ThinkPHP支持对某个字段进行区间查询

  

  

  内层数组最后一个元素值默认是'AND',也可以是'OR','XOR' 

  内层数组的最后一个元素之前并不是只可能有两个元素,而是可以有多个元素的,且元素值为数组

  

  

四、组合查询

  1、ThinkPHP在进行多字段查询时,默认的逻辑关系是逻辑与(AND),可以通过外层数组元素键'_logic'指定逻辑关系

  

  

  2、通过外层数组元素键'_string'还可以实现数组条件与字符串条件混合使用

  

  

五、复合查询

  通过外层数组元素键'_complex'可以指定查询子条件

  

  

六、统计查询

  在实际开发中,经常会用到统计数据,比如说,当前所有(或满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等。ThinkPHP会这些可能的统计操作都设计了相应的内置方法

  而且统计查询方法都支持连贯操作。那么显然可以用where()方法定义查询范围咯

  1、count()方法

  获取当前数据表的记录数

  

  2、max()方法

  获取数据表中某个字段最大值

  

  3、min()方法

  与max()同理

  4、avg()方法

  与max()同理

  5、sum()方法

  与max()同理

七、定位查询

  ThinkPHP支持定位查询,但是必须要求当前模型继承高级模型类,可以使用getN()方法直接访问结果中某个位置的记录

  getN(正整数)、getN(负整数)、first()、last()

八、SQL查询

  ThinkPHP仍然保留了原生的SQL查询(R)执行(CUD)操作支持,为了满足复杂查询的需要和一些特殊的数据操作,SQL查询的返回值是直接返回Db类的查询结果,没有做任何的处理。而且可以支持查询缓存

  1、query()方法

  有受影响行数,且有结果集,用该方法。参数为完整的原生sql语句

  2、execute()方法

  有受影响函数,没有结果集,用该方法。参数为完整的原生sql语句

九、动态查询

  1、直接根据数据表的字段进行查询,但是只支持单字段

  

  

  2、获取符合条件的前N条记录

  直接使用topN()方法,同样的必须继承高级模型

  

  

  

  

  对于ThinkPHP的动态查询,咋一看可能不太好理解,可能会问,$User这个对象哪来的getByUsername()、top3()或top()方法呢?Model类和AdvModel类都没有这些方法,而自定义的UserModel类也没有这些方法?!

  PHP同JavaScript一样,也支持动态给对象添加公开的属性或方法!

  

 

  

  

  

  

    

    

posted on 2016-08-31 16:51  Yang24556  阅读(933)  评论(0编辑  收藏  举报

导航