我有带注释的数据库(物化路径)(mysql)。如果我选择所有通讯中的“select * from comm where post_id = 10 order by path ASC ”结果我有来自路径排序的评论,其中旧日期位于顶部,而较新位于底部。< / p>
那么,有没有办法像disqus一样选择更新的?如果我只是“按路径DESC排序” - 比分支显示颠倒 - 这不是我想要的。 所以我需要按日期排序(新的通讯在顶部)和路径。 谢谢!
链接到更大的图片https://drive.google.com/file/d/0BwIgYhO9h960ZTl4a24wNXFFQnM/view?usp=sharing
答案 0 :(得分:2)
你必须在第一点之后找到该部分。
然后你订购DESC直到第一部分,ASC在最后一部分之后。
SELECT * FROM comments
WHERE post_id=10
ORDER by substring_index(path, '.', 1) DESC,
path ASC
请注意,您在第三列的附件中出错,反转9972和9974.
在这种情况下,我不知道MySQL优化引擎是否使用路径上设置的索引来对结果进行排序。将列添加到模型中应该更有效。
答案 1 :(得分:0)
看起来您需要一组查询:
我建议查看包含联合的查询。这样您就可以组合两个结果集。这样做的缺点可能是当您拥有大量记录时,您的查询性能会受到影响。如果发生这种情况,您可以查看自联接查询等。
答案 2 :(得分:0)
depth
字段,其中外部项目为1,但评论时为> 1。top_of_thread
,其中包含原始发布的时间戳。由于path
中缺少前导零,因此字符串比较不会总是正确的。因此,我要求timestamp
。
ORDER BY top_of_thread DESC, -- to get the newest thread at the top
depth=1 DESC, -- to sort top of thread before comments
timestamp ASC -- oldest comment first (or DESC?)
( path LIKE '% %' )
似乎等同于( depth > 1 )
?