MySQL:按线程分组评论,按分数和发布日期排序

时间:2016-11-29 07:26:09

标签: mysql

我正在为用户评论构建一个MySQL数据库,并发布了有关特定主题的信息。

  • 每个主题都有很多评论
  • 有两种类型的评论:根和回复
  • 所有对同一根的回复以及该根属于同一个帖子
  • ThreadID等于根<{li}>的CommentID

以下是示例数据: enter image description here

我正在尝试构建一个MySQL查询,该查询将选择主题#55的所有注释,按此排列:

  • 来自同一ThreadID的评论应该列在一起
  • 首先按得分最高的主题排序(主题分数是评论分数的总和)
  • 如果线程分数相等,则具有最早根评论的线程为
  • 在一个帖子中,按照最早的评论排序

结果还应包含ThreadScore

的列

解决方案如下: enter image description here

不幸的是,我无法在一个有效的查询中解决问题。

我当前的查询按线程正确分组,但不考虑分数:

select * from comments c
where c.Topic=55
order by c.ThreadID asc, c.TimeCreated asc

Here's a fiddle您可以在其中测试针对此表的查询

1 个答案:

答案 0 :(得分:1)

您可以尝试以下查询

select c.*, ct.ThreadScore from comments c
join (select ThreadId, sum(Score) ThreadScore
     from comments
     group by ThreadId) ct
     on c.ThreadId = ct.ThreadId
where c.Topic=55
order by c.ThreadId asc, ct.ThreadScore desc, c.TimeCreated asc

我得到的结果是

enter image description here

希望这可以解决您的问题