具体化路径按日期+路径排序

Materialized path sorting order by date + path

我有带注释的数据库(具体化路径)(mysql)。如果我 select 所有带有 "select * from comm where post_id=10 order by path ASC" 的 comm`s 结果我有来自 post 的评论按路径排序,较早的日期在顶部,较新的在底部。

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

link 到大图 https://drive.google.com/file/d/0BwIgYhO9h960ZTl4a24wNXFFQnM/view?usp=sharing

Bigger pic

看来您需要组合查询:

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

我建议查看包含联合的查询。这样您就可以合并两个结果集。不利的一面是,当您有大量记录时,您的查询性能会受到影响。如果发生这种情况,您可以查看自连接查询等。

  • 我需要一个 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 ) ?

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

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

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

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

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