ThinkPHP3.1查询语言详解(3)

复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。
很多查询方式可以相互转换,例如上面的查询条件可以改成:

$where['id'] = array('gt',1); $where['_string'] = ' (name like "%thinkphp%") OR ( title like "%thinkphp") ';

最后生成的SQL语句是一致的。

7.统计查询

在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括:

方法 说明
Count   统计数量,参数是要统计的字段名(可选)  
Max   获取最大值,参数是要统计的字段名(必须)  
Min   获取最小值,参数是要统计的字段名(必须)  
Avg   获取平均值,参数是要统计的字段名(必须)  
Sum   获取总分,参数是要统计的字段名(必须)  

 

用法示例:

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

获取用户数:

$userCount = $User->count();

或者根据字段统计:

$userCount = $User->count("id");

获取用户的最大积分:

$maxScore = $User->max('score');

获取积分大于0的用户的最小积分:

$minScore = $User->where('score>0')->min('score');

获取用户的平均积分:

$avgScore = $User->avg('score');

统计用户的总成绩:

$sumScore = $User->sum('score');

并且所有的统计查询均支持连贯操作的使用。

8.SQL查询

ThinkPHP内置的ORM和ActiveRecord模式实现了方便的数据存取操作,而且新版增加的连贯操作功能更是让这个数据操作更加清晰,但是ThinkPHP仍然保留了原生的SQL查询和执行操作支持,为了满足复杂查询的需要和一些特殊的数据操作,SQL查询的返回值因为是直接返回的Db类的查询结果,没有做任何的处理。主要包括下面两个方法:

一、query方法

query  执行SQL查询操作
用法   query($sql,$parse=false)  
参数   sql(必须):要查询的SQL语句
parse(可选):是否需要解析SQL
 
返回值  

如果数据非法或者查询错误则返回false


否则返回查询结果数据集(同select方法)

 
使用示例:

$Model = new Model() // 实例化一个model对象 没有对应任何数据表 $Model->query("select * from think_user where status=1");

如果你当前采用了分布式数据库,并且设置了读写分离的话,query方法始终是在读服务器执行,因此query方法对应的都是读操作,而不管你的SQL语句是什么。
二、execute方法

execute用于更新和写入数据的sql操作
用法   execute($sql,$parse=false)  
参数   sql(必须):要执行的SQL语句
parse(可选):是否需要解析SQL
 
返回值   如果数据非法或者查询错误则返回false 
否则返回影响的记录数
 

使用示例:

$Model = new Model() // 实例化一个model对象 没有对应任何数据表 $Model->execute("update think_user set where status=1");

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f73eb105c1308043f0abf9bd6e17e8fc.html