0

我有带有注释的数据库(物化路径)(mysql)。如果我使用“select * from comm where post_id=10 order by path ASC ”选择所有 comm,结果我有来自按路径排序的帖子的评论,旧日期在顶部,新日期在底部。

那么,有没有办法在 disqus 中使用 like 在顶部选择更新?如果我只是“按路径 DESC 排序” - 分支会倒置显示 - 这不是我想要的。所以我需要按日期(顶部的新通讯)和路径排序。谢谢。!

链接到更大的图片https://drive.google.com/file/d/0BwIgYhO9h960ZTl4a24wNXFFQnM/view?usp=sharing

更大的图片

4

3 回答 3

2

你只需要找到第一点之后的部分。

然后在第一部分之前订购 DESC,在最后一部分之后订购 ASC。

SELECT * FROM comments 
  WHERE post_id=10
  ORDER by substring_index(path, '.', 1) DESC,
      path ASC

请注意,您在第三列的附件中有错误,将 9972 和 9974 颠倒。

我不知道,在这种情况下,MySQL 优化引擎是否使用路径上设置的索引对结果进行排序。在模型中添加列应该更有效。

于 2015-02-17T08:26:30.133 回答
0

看起来您需要组合查询:

  1. 创建一个选择查询,其中选择主评论(没有父评论的评论)并按日期降序排列。
  2. 将这些结果与具有父记录的评论结合起来,并按升序对这些条目进行排序。

我建议查看包含联合的查询。这样您就可以组合两个结果集。这样做的缺点可能是当您有很多记录时,您的查询性能会受到影响。如果发生这种情况,您可以查看自联接查询等。

于 2015-02-16T08:29:58.803 回答
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 )

于 2015-02-17T01:34:24.353 回答