mySQL - UNION после ограниченного выбора - PullRequest
0 голосов
/ 03 ноября 2018

Я пишу очень простой скрипт форума на 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', но затем вернуть всех родителей, братьев и сестер и двоюродных братьев из этих сообщений?

Я думаю, что это отличается от ранее ответившего на вопрос иерархического рекурсивного запроса, потому что мы понятия не имеем, где в дереве мы находимся, поэтому мы должны идти вверх и вниз по дереву, чтобы завершить запрос. Кроме того, у нас потенциально есть НЕСКОЛЬКО родителей / братьев и сестер.

...