php having,having方法

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表中数据如下:

c4a46731f3a45eea95855b1749c9ffca.png

总结:having条件与where条件非常相似,但又有本质不同。where是根据某列特征进行查询,而having是在查询已经产生的结果集中进行筛选。这二个方法执行的对象和时机是不同的,请注意区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Phalcon是一个开放源码的、全堆栈的PHP5框架,使用C扩展编写,专门为高性能优化,无需使用C语言,所有函数都以PHP类的方式。PhalconPHP 3.4.0 更新日志:2018-05-28添加Phalcon\Mvc\Router::attach直接将路由对象添加到路由器#13326中;增加了侦听请求的功能:beforeAuthorizationResolve和request:afterAuthorizationResolve事件,这种能力可以使用自定义授权解析器#13327;在Phalcon\Mvc\Model中添加呼叫事件afterFetch:刷新#12220;添加Phalcon\Http\Response::getReasonPhrase以从状态报头#13314中检索原因词组;添加Phalcon\Loader::setFileCheckingCallback来设置内部文件存在解析器#13360;增加了为Phalcon\Mvc\Collection::aggregate#12302传递聚合选项的功能;添加Phalcon\Crypt::setHashAlgo来设置用于计算消息摘要的散列算法的名称#13379;添加Phalcon\Crypt::getHashAlgo以获得用于计算消息摘要的散列算法的名称#13379;添加Phalcon\Crypt::useSigning来设置是否必须使用计算消息摘要(注意:此功能将在Phalcon4.0.0中默认启用)#13379;添加了Phalcon\Crypt::getAvailableHashAlgos以获得适用于计算消息摘要的注册散列算法列表#13379;添加了Phalcon\Crypt::__构造,现在可以在对象构造中设置密码,并且可以启用计算消息摘要,而无需明确调用setCipher或useSigning#13379;添加了Phalcon\Crypt\Mismatch,在Phalcon\Crypt中抛出的异常将使用这个类#13379;添加Phalcon\Http\Cookie::setSignKey来设置用于生成消息认证代码的符号密钥(例如消息摘要);添加了Phalcon\Http\Response\Cookies::setSignKey来设置用于生成消息认证代码的符号密钥(例如消息摘要);更改了Phalcon\Crypt::setCipher,以便在设置密码算法期间重新配置IV长度;更改了Phalcon\Crypt::setCipher,以便在密码不可用的情况下抛出Phalcon\Crypt\Exception;修复Phalcon\Debug\Dump::output的回归(#13308)以正确使用详细模式#13315;修正Phalcon\Mvc\Model\Query\Builder::having和Phalcon\Mvc\Model\Query\Builder::在哪里正确合并绑定类型#11487;修正Phalcon\Mvc\Model::setSnapshotData以正确设置旧快照;超级全球不存在时不要抛出异常#13252,#13254,#12918。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值