这是我的评论/投票架构/示例数据: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
这可以正确维护线程,但正如预期的那样,投票永远不会使帖子按顺序上升。
当前结果:
我试图实现的结果将 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/