2

我正在开发一个需要能够根据评论找出帖子的新闻提要,虽然这本身很简单,但我无法弄清楚如何只获取最新评论比特定评论更早的“帖子”时间。

为了演示,这里是我的数据的一个过于简化的版本:

+----+---------+------------+
| 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 子句,它仍然会返回 Forum,因为它有一个与之匹配的评论。

我做了一个疯狂的猜测并尝试了

SELECT module, max(time) FROM `comments` GROUP BY module WHERE max(time) < 1343739350 ORDER BY max(time) DESC LIMIT 0, 5

然而,结果证明这是我的一厢情愿。

所以问题是,我如何编写一个可以做到这一点的 mysql 命令?

4

1 回答 1

1

在处理聚合列时,需要使用HAVING子句而不是WHERE子句,

SELECT module, max(time) 
FROM `comments` 
GROUP BY module 
HAVING max(time) < 1343739350 
ORDER BY max(time) DESC 
LIMIT 0, 5
于 2013-04-15T15:38:44.273 回答