| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Получить всех родителей элемента в дереве |
| Автор: zammar 18.9.2009, 17:43 |
![]() Как можно получить всех родителей для каждого элемента. Например, для 4 получить идентификаторы 2-ки и 1-ы для 2-ки идентификатор 1 id name left right level 1 eee 0 11 1 2 sss 1 6 2 3 www 7 10 2 4 ggg 2 3 3 5 jjj 4 5 3 6 ooo 8 9 3 |
| Автор: Gluttton 18.9.2009, 17:57 |
| Не совсем понятно (мне), а точнее совсем не понятно СУБД? |
| Автор: Zloxa 18.9.2009, 19:57 |
Судя по всему дерево представлено в виде http://www.woweb.ru/publ/41-1-0-464 |
| Автор: Gluttton 18.9.2009, 20:09 |
Здорово, открыл для себя nested sets |
| Автор: Zloxa 18.9.2009, 20:24 |
в FB есть рекурсивные запросы, этот анонизгемморой тебе врядли там понадобится. Получается сейчас наверное только MySQL не умеет рабоать с деревьфми. Однако ключевые слова для поиска, навсяк, запомнить желательно бы, ну и ключевой принцип тоже ;) |
| Автор: Zloxa 19.9.2009, 02:27 | ||
тип того. nested sets безумно дорогие на модификацию. Фактически этот способ хранения применим только для весьма статичных данных с очень невеликим объемом./*О конкурентной модификации я, если честно, пока даже не размышлял ибо мысль об обдумывании стратегии конкурентной модификации меня заведомо ввергает в ужос. Хотя, может, там все просто и думать придется лишь самую малость. Но буде мне пришлось бы реализовывать такую модель, я таки бы смалодушничал и впопервой, пока не подумал, проводил бы модификации в режиме монопольного доступа.*/ Однако, стоит заметить, этот метод хранения, таки дает существенные преимущества на выборке. |
| Автор: zammar 19.9.2009, 08:57 | ||
| Извиняюсь, база MySQL. Я не совсем правильно задал вопрос. Мне нужно достать все элементы и для каждого всех его родителей. Это можно сделать только запросом в цикле как мне думается или все таки как-то можно это сделать одним запросом? Ну а метод который предложил Gluttton лежит конечно на поверхности. Но все равно спасибо.
|
| Автор: Gluttton 19.9.2009, 22:29 | ||||||||
Для указанных выше исходных данных, приведенный ниже запрос
Вернет следующие данные: ![]()
Что за императивные взгляды в декларативном мировозрении
Всё равно пожалуйста... Подумал тут на досуге... Правильнее будет так:
И тогда результат буде таким: ![]() |
| Автор: Zloxa 19.9.2009, 22:30 |
приведите ожидаемый Вами результат запроса. |
| Автор: gcc 21.9.2009, 04:21 | ||
все дерево в низ:
смотря какое дерево все таки, в большинстве случаев достаточно просто parent была статья opennet.ru nestedset на innodb с дополнительной таблицей и внешними ключами, транззакцией в 6 раз быстре обычного nestedset при UPDATE INSERT но innodb наверное будет грузить сервер больше чем MyISAM |
| Автор: zammar 21.9.2009, 13:00 |
| Gluttton, спасибо. То что нужно. Всем спасибо! |