![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
zammar |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
![]() Как можно получить всех родителей для каждого элемента. Например, для 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 |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Не совсем понятно (мне), а точнее совсем не понятно
![]() СУБД? -------------------- Слава Україні! |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Здорово, открыл для себя nested sets ![]() -------------------- Слава Україні! |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
в FB есть рекурсивные запросы, этот анонизгемморой тебе врядли там понадобится. Получается сейчас наверное только MySQL не умеет рабоать с деревьфми. Однако ключевые слова для поиска, навсяк, запомнить желательно бы, ну и ключевой принцип тоже ;) -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Gluttton |
|
||||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Ну теперь, когда я теоретически подкован
![]() ![]() Таблица: ![]() Первый вариант я списанал адаптировал ![]()
Результат: ![]() Второй вариант, я написал, вдохновлённый реализацией рекурсивных запросов в Firebird:
Результат: ![]() * - запросы выполнялись на Firebird 2.1; - left, right, level - зарезервированные слова Firebird 2.1, и для использования необходимо помещать их в двойные кавычки (и что меня очень удевило приводить к верхнему регистру ![]() Zloxa,
Т.е. nested sets необходимы только в том случае если нет рекурсии? А если есть (в смысле реализована) рекурсия, то деревья можно строить используя parent_id? -------------------- Слава Україні! |
||||||
|
|||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
тип того. nested sets безумно дорогие на модификацию. Фактически этот способ хранения применим только для весьма статичных данных с очень невеликим объемом./*О конкурентной модификации я, если честно, пока даже не размышлял ибо мысль об обдумывании стратегии конкурентной модификации меня заведомо ввергает в ужос. Хотя, может, там все просто и думать придется лишь самую малость. Но буде мне пришлось бы реализовывать такую модель, я таки бы смалодушничал и впопервой, пока не подумал, проводил бы модификации в режиме монопольного доступа.*/ Однако, стоит заметить, этот метод хранения, таки дает существенные преимущества на выборке. Это сообщение отредактировал(а) Zloxa - 19.9.2009, 02:50 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
zammar |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
Извиняюсь, база MySQL.
Я не совсем правильно задал вопрос. Мне нужно достать все элементы и для каждого всех его родителей. Это можно сделать только запросом в цикле как мне думается или все таки как-то можно это сделать одним запросом? Ну а метод который предложил Gluttton лежит конечно на поверхности. Но все равно спасибо.
|
|||
|
||||
Gluttton |
|
||||||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Для указанных выше исходных данных, приведенный ниже запрос
Вернет следующие данные: ![]()
Что за императивные взгляды в декларативном мировозрении ![]()
Всё равно пожалуйста... Подумал тут на досуге... Правильнее будет так:
И тогда результат буде таким: ![]() Это сообщение отредактировал(а) Gluttton - 20.9.2009, 10:26 -------------------- Слава Україні! |
||||||||
|
|||||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
приведите ожидаемый Вами результат запроса. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
все дерево в низ:
смотря какое дерево все таки, в большинстве случаев достаточно просто parent была статья opennet.ru nestedset на innodb с дополнительной таблицей и внешними ключами, транззакцией в 6 раз быстре обычного nestedset при UPDATE INSERT но innodb наверное будет грузить сервер больше чем MyISAM |
|||
|
||||
zammar |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 289 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
Gluttton, спасибо. То что нужно.
Всем спасибо! |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |