2014-01-13 36 views
1

我有以下查询,这应该会得到每个update_id最新的3条评论。它似乎有效,直到我发现一个合理的问题,无论更新如何,它都能得到最新的3条评论;它应该为每个update_id获取最新的3条评论。我怎样才能做到这一点?显然,极限(3)是错误的。MySQL获取最新的3行为每个ID在哪里

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 
+0

如果你想三个结果LIMIT 3是怎么啦? –

+0

因为我有10个更新,所以最新的3将乘以30而不是3.我想显示最新的3每update_id。 – Ando

+0

这可能有所帮助:[在GROUP BY中使用LIMIT获得每个组的结果?](http://stackoverflow.com/questions/2129693/mysql-using-limit-within-group-by-to-get-n-每组的结果) –

回答

1

试试这个:

SELECT A.*, u.name 
FROM (SELECT c.*, IF(@updateId = @updateId:=update_id, @idx:[email protected]+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 
+0

YES !!!!!感谢您的领导!这是非常棒的解决方案,效果很好。真的很有帮助。 – Ando

+0

@Ando非常欢迎... –