2010-03-04 3 views
8

У меня есть таблица базы данных, которая связывает местоположения вместе; местоположение может находиться в месте, которое может находиться внутри другого места.MySQL - Рекурсивная древовидная структура

location (<id>, ....) 
location_parent (<location_id>, <parent_id>) 

Вот MySQL/PHP идти вниз на глубину одного:

$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN 
(SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid')"; 

Как я, учитывая родитель место, получает все свои места потомков, независимо от того, насколько глубоко, просто используя MySQL?

+0

См. Http://stackoverflow.com/questions/587488/handling-hierarchy-data-in-database –

ответ

20

Там в good-looking article над на mysql.com с изложением различных способов управления иерархическими данными. Я думаю, что он обеспечивает полное решение вашего вопроса и показывает различные менее простые, но более быстрые подходы (например, вложенные наборы).

+3

+1 очень интересная статья, которую вы здесь связали. –

+0

статья недоступна. –

+0

@ На обратной стороне машины все еще есть. Обновлено. –

0

Поскольку MySQL заявления может возвращать только таблицы-структурированные данные, как вы представляете возвращенную древовидную структуру?

Можно сделать выбор с помощью таблицы [parent_id, child_id], но для этого требуется временная таблица, и я видел ее в DB2, а не в MySQL.

Проверить эту статью для реализации на древовидные структуры, хранящихся в MySQL: http://articles.sitepoint.com/article/hierarchical-data-database/

1

MySQL отсутствует встроенную поддержку иерархических функций, так что вам придется эмулировать их с помощью переменного сеанса, чтобы сохранить состояние рекурсии.

Смотрите эту статью о том, как реализовать функцию:

Смежные вопросы