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

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实现此目的?

最佳答案

您的hading子句没有意义,当您进行=,>等比较时使用了hading。活动记录库就像明智地寻找要比较的值一样

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

关于mysql - 具有聚合函数MAX的Codeigniter Active Record HAVING子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23738865/

10-11 05:22