SQL:按投票排序注释并维护线程

时间:2014-09-17 15:06:16

标签: 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的回复。通过"线程"也很容易识别回复。领域。它以易于排序的方式描述了评论的级别/顺序。

1 个答案:

答案 0 :(得分:0)

这为我解决了。但是,我并不完全确定这些子查询在更深层次的评论级别上的后果是什么。

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