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?

9
задан a'r 4 March 2010 в 11:05
поделиться

4 ответа

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

23
ответ дан 4 December 2019 в 08:51
поделиться

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

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

1
ответ дан 4 December 2019 в 08:51
поделиться

Поскольку операторы mysql могут возвращать только данные с табличной структурой, как вы себе представляете возвращаемую древовидную структуру?

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

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

0
ответ дан 4 December 2019 в 08:51
поделиться

Гораздо лучшим способом управления данными такого рода является использование техники Modified Preorder Tree Traversal:

http://articles.sitepoint.com/article/hierarchical-data-database/2

hth

w://

0
ответ дан 4 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: