mysql - SQL:按投票对评论进行排序并维护线程

标签 mysql sql

这是我的评论/投票架构/示例数据:http://paste2.org/IkaXpcMt

phpmyadmin 中的表格截图:http://i.imgur.com/EJlHkHx.png http://i.imgur.com/EBf39Rl.png

这是我到目前为止的查询:

SELECT cid, pid, thread, name, ( SELECT COALESCE(SUM(value), 0) FROM votingapi_vote WHERE entity_type = 'comment' AND entity_id = c.cid ) votes
FROM comment c
WHERE nid = 13852 AND status = 1
ORDER BY thread DESC, votes DESC

这可以正确维护线程,但正如预期的那样,投票永远不会使帖子按顺序上升。

当前结果:

Current result

我试图实现的结果将 CID 5 放在顶部,然后是 2、26、41、22、44、42、43 等

所以澄清一下,同一级别的评论必须按投票排序,但他们的回复必须遵循相同的逻辑紧随其后。

回复的 PID(父 ID)字段设置为父的 CID 号。 所以评论 44 和 42 是对评论 22 的回复。通过“thread”字段也很容易识别回复。它以一种易于排序的方式描述评论的级别/顺序。

最佳答案

这为我解决了这个问题。不过,我并不完全确定这些子查询对更深层次评论的影响是什么。

SELECT cid, pid, thread, name, ( SELECT COALESCE(SUM(value), 0) FROM votingapi_vote WHERE entity_type = 'comment' AND entity_id = c.cid ) votes, ( SELECT COALESCE(SUM(value), 0) FROM votingapi_vote WHERE entity_type = 'comment' AND entity_id = IF(c.pid=0, c.cid, c.pid) ) top_level_vote
  FROM comment c
  WHERE nid = 13852 AND status = 1
  ORDER BY top_level_vote DESC, thread DESC

关于mysql - SQL:按投票对评论进行排序并维护线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25894179/

相关文章:

mysql - ORDER BY FIELD ,给定的字段顺序最后出现

MySQL 搜索 TEXT 字段以匹配文本,用于多行绝对

sql - 使用 ORDER BY 子句的替代结果

mysql - SQL查询以通过连接获取与最大值对应的行

MySQL - 检查 InnoDB 表中的数据是否已更改的最快方法

mysql - UNIX_TIMESTAMP 为空

mysql - 在多线程应用程序中使用 libmysqlclient

mysql - 如何根据列选择有限行

python - django:如何在 ManyToManyField(通过)相关模型中的字段上对查询集进行排序

mysql - SQL 按两个以上联接进行分组