我正在用PHP编写一个非常基本的论坛脚本作为学习练习。假设我有一个看起来像这样的表(为清楚起见,减少到3列):
ID PARENT TITLE
1 null Welcome to Post-Tools User Forum
2 1 Thank you!
3 2 Amen
4 null EDL Loading Problems
5 4 EDL Loading Problems
6 4 EDL Loading Problems
7 null Christmas Work Schedule
8 7 Christmas Work Schedule
9 1 Another Thank You!
10 3 I agree!
11 10 Idiots
12 1 Excellent tool.
13 3 Yup
14 2 I second that!
15 4 EDL Loading Problems
说我要选择最后5条消息。但是,为了对每个新消息都有一个完整线程,我还需要遍历整个树,以查找这5条消息中的每条消息的最高父级,然后向下爬回让那些父母的所有孩子
我可以选择最后5条消息,如下所示:
SELECT * FROM postsTable
ORDER BY id DESC
LIMIT 5
哪个返回:
ID PARENT TITLE
15 4 EDL Loading Problems
14 2 I second that!
13 3 Yup
12 1 Excellent tool.
11 10 Idiots
然后我想我可以通过第一个查询返回的所有父级的第二次选择(即消息4、2、3、1和10)来加入该结果。
但是,一旦我使用ORDER BY和/或LIMIT命令,就无法进行联接或联合工作。
此外,一旦有了父母,我仍然需要做进一步的查询,以确保找到最高级的父母以及这些父母中的任何其他子孙。我认为学习mySQL将会是一个中等难度的测试,变得比预期的要复杂得多。
有人对如何将初始查询限制为最后的“ X”消息,然后返回这些消息的所有父母,兄弟姐妹和堂兄弟有任何建议吗?
我认为这与之前回答的层次递归查询问题不同,因为我们不知道树在哪里,因此我们必须同时向上和向下浏览树才能完成查询。此外,我们可能要考虑多个父母/兄弟姐妹。