【问题标题】:SELECT 3 comments for each post [duplicate]为每个帖子选择 3 条评论 [重复]
【发布时间】:2015-01-07 18:39:39
【问题描述】:

我有一张桌子comments

id | comment | post_id |
1     Hey       1
2     Hey       2
3     Hey       2
4     Hey       3
5     Hey       1

我想为每个帖子获得 3 cmets。

我在下面做了类似的事情。

"select * from comments WHERE post_id IN(1,2,3) LIMIT 3"

但这只会给我带来3 rows

但我希望每个post_id 的最大3 rows 不等于3 rows

我哪里出错了有什么帮助吗?

【问题讨论】:

  • 你能解释一下@violator667
  • 这称为“每组最大 N”。它经常被问到而且不是特别简单,我正在寻找一个很好的现有答案来指向你......
  • 你可以显示@MichaelBerkowski
  • @RockFellerDumbstep 雷达下面的答案应该正是您需要的实现。它表达了与比尔的链接答案相同的内容,但语法略有不同。

标签: php mysql sql group-by limit


【解决方案1】:

这就像根据 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

【讨论】:

  • #1054 - '字段列表'中的未知列 'id'
  • 您张贴在顶部的表格有一个comments.id 列。这应该是正确的。
  • sqlfiddle.com/#!2/d7de45/2 它应该按原样工作 - 我在 post_id = 1 中添加了更多示例行,以表明上述 3 行已被消除
  • 哎呀这是一个小错误让它工作!不介意,但你能解释一下这里发生了什么吗? @MichaelBerkowski
  • @RockFellerDumbstep,您可以在内部查询之前订购。检查这里。 sqlfiddle.com/#!2/e04817/3
猜你喜欢
  • 2015-04-17
  • 2015-03-16
  • 2010-11-08
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 2021-07-13
相关资源
最近更新 更多