mysql для получения глубины записи, подсчета родительских и родительских записей - PullRequest
3 голосов
/ 13 мая 2010

Скажем, у меня есть таблица сообщений, содержащая поля 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

Заранее спасибо!

1 Ответ

1 голос
/ 13 мая 2010

Если вы делаете много подобных запросов, вы можете обнаружить, что модель с вложенным множеством является более подходящей, чем список смежности, о котором вы спрашиваете. Здесь хорошее обсуждение обеих моделей здесь .

В любом случае, чтобы выполнить то, что вы просите, с помощью списка смежности, вы просматриваете либо рекурсию на прикладном уровне, либо сохранение уровня в виде 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;
...