MySQL получить глубину записи, считать родительские и предки

StackOverflow https://stackoverflow.com/questions/2824033

  •  26-09-2019
  •  | 
  •  

Вопрос

Скажем, у меня есть почтовая таблица, содержащая поля 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top