【发布时间】:2019-01-22 19:43:20
【问题描述】:
我正在尝试获取数据库中所有父帖子的列表,这些帖子按该线程的最新活动排序。这意味着检查该线程的最新帖子 - 如果有子帖子,则检查他们的最近日期,如果没有,则检查父母的日期。
我有一个名为“帖子”的表格,其中包含以下内容:
如果帖子是父帖子(主题的第一篇帖子):主题不为空,Parent_ID 为空。它看起来像这样:
ID | Name | Message | Date | File | Topic | Parent_ID
=====================================================
1 | Joe | Wee! | Date | File | Blah! | NULL
如果帖子是子项(线程中的帖子 = 父 ID):主题为空,Parent_ID 不为空。它看起来像这样:
ID | Name | Message | Date | File | Topic | Parent_ID
=====================================================
2 | Mike | Hi! | Date | File | NULL | 1
我已经非常接近了。我认为这与With Clause 有关。到目前为止,这是我想出的:
WITH threads AS (
SELECT ID,Name,Date,File,Topic,Parent_ID FROM posts WHERE Parent_ID IS NULL
UNION ALL
SELECT Parent_ID,Name,Date,File,Topic,Parent_ID FROM posts WHERE Parent_ID NOTNULL ORDER BY Date DESC
)
SELECT * FROM threads GROUP BY ID ORDER BY Threads.date;
我已经知道我可以搜索类似的问题。我已经尝试过了,但仍然没有得出确切的结论。任何帮助将不胜感激。
另外,我应该换桌子吗?也许添加一个线程列甚至一个线程表或其他东西以使事情变得更容易?
【问题讨论】:
-
您熟悉递归 CTE 吗?
-
不熟悉,但我正在阅读有关它的 With 子句。基本上搜索您之前进行的搜索,对吗?那我可以
WITH RECURSIVE threads as... etc吗? -
另外,这在 PHP 中更容易做到吗?从表中获取所有结果并在 PHP 中从结果数组中进行一些排序?
-
这里有父/子层次结构的 CTE 的好例子:sqlite.org/lang_with.html
标签: sqlite sorting parent-child