Я пишу очень простой скрипт форума на 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', но затем вернуть всех родителей, братьев и сестер и двоюродных братьев из этих сообщений?
Я думаю, что это отличается от ранее ответившего на вопрос иерархического рекурсивного запроса, потому что мы понятия не имеем, где в дереве мы находимся, поэтому мы должны идти вверх и вниз по дереву, чтобы завершить запрос. Кроме того, у нас потенциально есть НЕСКОЛЬКО родителей / братьев и сестер.