thinkphp查询,3.X 5.0方法(亲试可行)

时间:2017-06-22

请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。

<?php 
$map['id'] = array('gt','100'); 
$map['_query'] = 'status=1&score=100&_logic=or'; 
?>

得到的查询条件是:

`id`>100 AND (`status` = '1' OR `score` = '100')

七、复合查询

复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。

例如:

<?php 
$where['name'] = array('like', '%thinkphp%'); 
$where['title'] = array('like','%thinkphp%'); 
$where['_logic'] = 'or'; 
$map['_complex'] = $where; 
$map['id'] = array('gt',1); 
?>

查询条件是

( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp%') )

复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。

很多查询方式可以相互转换,例如上面的查询条件可以改成:

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

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

八、统计查询

在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,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');

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

九、SQL查询

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

1.query方法 :执行SQL查询操作

用法 query($sql,$parse=false)

参数 sql(必须):要查询的SQL语句

parse(可选):是否需要解析SQL

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

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

使用示例:

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

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

2.execute方法 :execute用于更新和写入数据的sql操作

用法 execute($sql,$parse=false)

参数 sql(必须):要执行的SQL语句

parse(可选):是否需要解析SQL

返回值 如果数据非法或者查询错误则返回false 否则返回影响的记录数

使用示例:

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

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

十、动态查询

借助PHP5语言的特性,ThinkPHP实现了动态查询,核心模型的动态查询方法包括下面几种:

getBy 根据字段的值查询数据 例如,getByName,getByEmail
getFieldBy 根据字段查询并返回某个字段的值 例如,getFieldByName

1.getBy动态查询:该查询方式针对数据表的字段进行查询记录。

  • 共4页:
  • 上一页
  • 3/4
  • 下一页
  • 上一篇:PHP 7安装调试工具Xdebug扩展的方法教程 下一篇:php 生成加密公钥加密私钥实例详解

    相关文章

    最新文章