我如何创建一个MySQL命令来获取最近收到帖子的类别?
我正在尝试加入表并将它们分组,但我不确定如何将结果限制为最大类别数。
所以举一个简单的例子说明我正在尝试做什么:
Users (id)
Favorites (id, last_updated, post_id, user_id)
Posts (id, title, category_id)
Categories (id, name)
然后是sql:
SELECT favorites.*, posts.category_id
FROM favorites
INNER JOIN posts ON favorites.user_id = 1 AND favorites.post_id = posts.id
INNER JOIN categories ON posts.category_id = categories.id
GROUP BY categories.id, favorites.id
ORDER BY favorites.last_updated DESC
显然,这个陈述并没有按预期运作,因为它为每个类别返回了许多结果,而不是每个类别的结果 - 最新的。
答案 0 :(得分:1)
您不能GROUP BY
SELECT
中没有的字段。
这是一个解决方案,假设您只想为user_id = 1:
SELECT c.id, MAX(f.last_updated)
FROM favorites f
INNER JOIN posts p ON (f.user_id = 1 AND f.post_id = p.id)
INNER JOIN categories c ON (p.category_id = c.id)
GROUP BY c.id
ORDER BY MAX(f.last_updated) DESC
通过这个,您可以获得所需类别的ID。您可以再次将结果与类别结合以获取其余列。