SELECT 每条 3 条评论 post
SELECT 3 comments for each post
我有一个tablecomments
id | comment | post_id |
1 Hey 1
2 Hey 2
3 Hey 2
4 Hey 3
5 Hey 1
我希望每个帖子获得 3 条评论。
我在下面做了类似的事情。
"select * from comments WHERE post_id IN(1,2,3) LIMIT 3"
但这只让我得到 3 rows
。
但我希望每个 post_id
最大 3 rows
而不是总计 3 rows
。
对我出错的地方有帮助吗?
这就像根据 post_id 进行分区,然后在该分区中选择 3 个元素
您可以使用 mysql 变量
来实现
select id, comment, post_id
from
(
SELECT id, comment, post_id, @row_number:=CASE WHEN @post_id=post_id THEN @row_number+1 ELSE 1 END AS row_number,
@post_id:=post_id AS varval
FROM comments
join (select @row_number := 0, @post_id := NULL ) as var
order by post_id, id
) t
where t.row_number <=3
我有一个tablecomments
id | comment | post_id |
1 Hey 1
2 Hey 2
3 Hey 2
4 Hey 3
5 Hey 1
我希望每个帖子获得 3 条评论。
我在下面做了类似的事情。
"select * from comments WHERE post_id IN(1,2,3) LIMIT 3"
但这只让我得到 3 rows
。
但我希望每个 post_id
最大 3 rows
而不是总计 3 rows
。
对我出错的地方有帮助吗?
这就像根据 post_id 进行分区,然后在该分区中选择 3 个元素 您可以使用 mysql 变量
来实现select id, comment, post_id
from
(
SELECT id, comment, post_id, @row_number:=CASE WHEN @post_id=post_id THEN @row_number+1 ELSE 1 END AS row_number,
@post_id:=post_id AS varval
FROM comments
join (select @row_number := 0, @post_id := NULL ) as var
order by post_id, id
) t
where t.row_number <=3