【问题标题】:Codeigniter Active Record HAVING clause with aggregate function MAX具有聚合函数 MAX 的 Codeigniter Active Record HAVING 子句
【发布时间】:2014-05-19 13:19:33
【问题描述】:

我正在尝试在 SQL 查询中使用带有 HAVING 子句的聚合函数,使用 Codeigniter 的 Active Record。

function get_last_each()
{
    $this->load->database();
    $q = $this->db->from('points')->group_by('nodeid')->having('max(timestamp)', NULL)->get();

    return $q->result_array();
}

它给了我一个数据库错误:

You have an error in your SQL syntax ...
SELECT * FROM (`points`) GROUP BY `nodeid` HAVING max(timestamp) = 

如果我在第二个参数中使用max(timestamp),生成的查询将像= max(timestamp) 一样结束。还使用了第三个参数来禁止查询转义,没有成功。

查询在 mysql 客户端上运行良好:

mysql> select nodeid, timestamp from points group by nodeid having max(timestamp);
+-----------+---------------+
| nodeid    | timestamp     |
+-----------+---------------+
| 10EF7F    | 1400497730790 |
| ADCFB2    | 1400501296786 |
...

如何通过 Codeigniter 使用功能来实现这一点?

【问题讨论】:

    标签: mysql codeigniter activerecord aggregate-functions


    【解决方案1】:

    你的having子句没有意义,当你在做一些comarison比如=,>等时使用have。活动记录库就像明智地寻找一个值来比较,你可以看到

    HAVING max(timestamp) = 
    

    同样的查询可以被重新定义为

    select nodeid, max(timestamp) from points group by nodeid
    

    http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html

    【讨论】:

    • 谢谢,你是对的。我将实际查询更改为您的建议。对 Codeigniter 的调用如下: $q = $this->db->select('nodeid, max(timestamp)')->from('points')->group_by('nodeid')->get();
    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2015-09-17
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多