【发布时间】:2017-06-26 17:09:26
【问题描述】:
用户表
id
user_cmets 表
标识 |用户 ID |内容 | created_at
我有一个用户 ID 列表,我想为每个用户 ID 获取最新的 3 个 cmets。
SELECT * FROM user_comments WHERE user_id IN (1, 2, 3, 4, 5)
ORDER BY created_at DESC
LIMIT 3;
这将从 所有 匹配的 ID 中获取最后 3 个 cmets,我想要 每个 ID 的最后 3 个 cmets。首选 1 个不带联合的查询。
我已尝试自行正确加入表格,但似乎无法正确完成。
** 编辑:我不能依赖 id 列进行排序,它必须使用 date 列。
谢谢。
** 我的最终解决方案
SELECT user_comments.* FROM user_comments
LEFT OUTER JOIN user_comments user_comments_2
ON user_comments.post_id = user_comments_2.post_id
AND user_comments.id < user_comments_2.id
where user_comments.post_id in (x,x,x)
GROUP BY user_comments.id
HAVING COUNT(*) < 3
ORDER BY user_id, created_at
@PaulSpiegel 提出的答案确实对我有用(有警告),但是我最终选择了使用来自该线程的信息制作的上述连接解决方案:link
比尔·卡尔文提到。
谢谢大家!
【问题讨论】:
-
SELECT * FROM user_cmets WHERE user_id=1 OR user_id=2 OR user_id=3 OR user_id=4 ORDER BY created_at DESC LIMIT 3;
-
你有 AUTO_INCREMENT 列吗?
-
@PaulSpiegel - 是的,id 列是 auto_inc。
-
@BillKarwin - 我能够使用该线程以正确的日期顺序工作。谢谢!
标签: mysql greatest-n-per-group where-in right-join sql-limit