我正在制作一个新闻Feed,需要能够根据评论找出帖子,而这本身很简单,我无法弄清楚如何才能获得"帖子& #34;最新评论的时间早于特定时间。
为了演示,这里是我的数据的过度简化版本:
+----+---------+------------+
| id | Module | Time |
+----+---------+------------+
| 1 | Forum | 1343739050 |
| 2 | Gallery | 1343739150 |
| 3 | Gallery | 1343739250 |
| 4 | Forum | 1343739350 |
+----+---------+------------+
要获得最近评论的五个模块,我只需使用
SELECT module, max(time) FROM `comments` GROUP BY module ORDER BY max(time) DESC LIMIT 0, 5
将返回
+---------+------------+
| Module | max(Time) |
+---------+------------+
| Forum | 1343739350 |
| Gallery | 1343739250 |
+---------+------------+
正是我想要的。 当我只想获得最重要的评论比特定时间更早的模块时,问题就出现了。 例如,早于1343739350(ID为4的评论时间),但是我只是抛出一个where子句,它仍将返回论坛,因为它有一个与之匹配的评论。
我疯狂猜测并尝试了
SELECT module, max(time) FROM `comments` GROUP BY module WHERE max(time) < 1343739350 ORDER BY max(time) DESC LIMIT 0, 5
然而,这对我来说是一厢情愿的想法。
所以问题是,如何编写一个可以执行此操作的mysql命令?
答案 0 :(得分:1)
处理聚合列时,需要使用HAVING
子句而不是WHERE
子句,
SELECT module, max(time)
FROM `comments`
GROUP BY module
HAVING max(time) < 1343739350
ORDER BY max(time) DESC
LIMIT 0, 5