具有聚合函数MAX的Codeigniter Active Record HAVING子句

时间:2014-05-19 13:19:34

标签: mysql codeigniter activerecord aggregate-functions

我尝试使用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实现此目的?

1 个答案:

答案 0 :(得分:1)

你的拥有条款没有意义,当你正在做一些像=,>这样的联系时使用。等活跃的记录库,如你所见,明智地寻找值进行比较

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