我有以下查询,据说它会为每个 update_id 获取最新的 3 条评论。它似乎有效,直到我发现一个逻辑问题,无论更新如何,它都会获得最新的 3 条评论;它应该为每个 update_id 获取最新的 3 条评论。我怎样才能做到这一点?显然 limit(3) 是错误的。
SELECT `comms` . * , `usr`.`name`
FROM (
`comms`
)
JOIN `users` AS usr ON `usr`.`id` = `comms`.`user_id`
WHERE `update_id`
IN (
'1451', '1416', '1186', '1157', '1150', '1122', '1057', '914', '850', '816', '794', '790', '749', '746', '745', '744', '740'
)
ORDER BY `id` DESC
LIMIT 3
最佳答案
试试这个:
SELECT A.*, u.name
FROM (SELECT c.*, IF(@updateId = @updateId:=update_id, @idx:=@idx+1, @idx:=0) idx
FROM comms c, (SELECT @updateId:=0, @idx:=0) A
WHERE update_id IN ('1451', '1416', '1186', '1157', '1150', '1122', '1057', '914', '850', '816', '794', '790', '749', '746', '745', '744', '740')
ORDER BY update_id, id DESC
) AS A
INNER JOIN users AS u ON u.id = A.user_id
WHERE A.idx < 3
关于MySQL 为其中的每个 id 获取最新的 3 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21086593/