手机建网站教程,青浦建设网站公司,包头市住房和城乡建设局网站,应届生求职网站官网having方法1、对分组统计的结果#xff0c;进行筛选如果将分分组查询的结果看成一张表的话#xff0c;having方法类似where语句的功能2、源码#xff1a;/thinkphp/library/think/db/Query.php/*** 指定having查询* access public* param string $having having* return $th…having方法1、对分组统计的结果进行筛选如果将分分组查询的结果看成一张表的话having方法类似where语句的功能2、源码/thinkphp/library/think/db/Query.php/*** 指定having查询* access public* param string $having having* return $this*/public function having($having){$this-options[having] $having;return $this;}源码非常简单就是给Query类的查询选项属性options[ having ] 赋值3、参数与返回值参数如果把分组查询结果看作一张新数据表的话having就相当于该表的where操作。同理这个“新表”中应该只有分组字段和统计字段(由聚合函数计算得到的值组成的字段)。我们having方法就是在统计字段中找出符合条件的记录如平均值大于500之类的条件。序号参数说明1聚合函数组成的运算表达式从统计查询结果是筛选出符合条件的记录having方法与where方法都可以设置查询条件但二者使用是有区别的(1) where方法中的字段必须是表中实际真实存在的字段(2) having方法中的定段不一定是表中实际字段只要是select语句可以查询或计算出来的表达式都可以例如拼接字段名、数值型字段的算术运算、统计类聚合函数等换句话说having 中的字段必须在select后面的字段列表中出现。返回值与其它方法一样返回查询对象本身便于后面访问调用4、实例演示任务1查询tp5_staff表中各部门的平均工资大于6400元的员工信息该实例是前面group方法的加强版加了一个限定条件而已请对照着看Index.php 控制器中代码如下namespace app\index\controller;//导入数据库类use think\Db;class Index {public function index(){//查询部门的平均工资小数保留2位$result Db::table(tp5_staff)//字段名称中可以使用聚合统计函数- field([dept部门,ROUND(AVG(salary),2)平均工资])- group(dept)- having(avg(salary) 6400)- select();//查看结果dump($result);}查询结果如下array(2) {[0] array(2) {[部门] string(9) 市场部[平均工资] float(9431.33)}[1] array(2) {[部门] string(9) 开发部[平均工资] float(6456.43)}}可以看到原来的市场部平均工资数据消失了因为他的平均工资不到6400生成的SQL语句如下SELECT dept AS 部门,ROUND(AVG(salary),2) AS 平均工资 FROM tp5_staff GROUP BY dept HAVING avg(salary) 6400表中数据如下总结having条件与where条件非常相似但又有本质不同。where是根据某列特征进行查询而having是在查询已经产生的结果集中进行筛选。这二个方法执行的对象和时机是不同的请注意区别。