我正在用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命令,我一辈子都不能使一个join或union工作。
此外,一旦我有了父母,我仍然需要做进一步的查询,以确保我找到了最高阶的父母和任何其他子女和孙子的父母。我原以为学习mysql是一个中等难度的测试,但现在比预期的要复杂得多。
有人对如何将初始查询限制为最后的“x”条消息,然后返回这些消息的所有父母、兄弟姐妹和堂兄弟姐妹有什么建议吗?
我认为这与前面回答的分层递归查询问题不同,因为我们不知道我们在树中的什么位置,所以我们必须在树上下移动来完成查询。此外,我们可能有多个父母/兄弟姐妹需要解释。
暂无答案!
目前还没有任何答案,快来回答吧!