MySQL получить глубину записи, считать родительские и предки
Вопрос
Скажем, у меня есть почтовая таблица, содержащая поля post_id
а также parent_post_id
. Отказ Я хочу вернуть каждую запись в почтовой таблице с количеством «глубины» поста. По глубине, я имею в виду, сколько родителей и предков существуют.
Возьмите эти данные, например ...
post_id parent_post_id
------- --------------
1 null
2 1
3 1
4 2
5 4
Данные представляют эту иерархию ...
1
|_ 2
| |_ 4
| |_ 5
|_ 3
Результат запроса должен быть ...
post_id depth
------- -----
1 0
2 1
3 1
4 2
5 3
Заранее спасибо!
Решение
Если вы делаете множество запросов, подобных этого, вы можете обнаружить, что модель вложенной установки более подходит, чем список соседних, о которых вы спрашиваете. Там хорошая дискуссия обеих моделей здесь.
В любом случае, чтобы сделать то, что вы спрашиваете со списком соседних, вы смотрите либо на рекурсию в уровне приложений, либо сохраняете уровень как 3-й столбец.
ETA: Если ваш уровень уровня не является ужасно высоким, вы можете сделать это с самим собой:
Например, узлы с 2 предками:
SELECT t1.node
FROM mytable AS t1
JOIN mytable AS t2 ON t1.parent = t2.node
JOIN mytable AS t3 ON t2.parent = t3.node
WHERE t3.parent IS NULL;