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