![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| SneG0K |
|
|||
|
Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
Есть таблица groups
id | parent_id | title Так вот. Мне нужно получить id, parent_id, title для строк, где id = 3,4,5 (для примера), а так-же id, prent_id, title всех родителей, для каждых строк. Т.е. если есть структура вида one / \ sub sub2 / \ \ sec1 sec2 sec3 | third | last и мне надо получить всех родителей элементов third и sub2, то тогда база должна мне выдать данные, отмеченные красным one / \ sub sub2 / \ \ sec1 sec2 sec3 | third | last Как составить такой запрос? Добавлено через 4 минуты и 36 секунд Как это сделать циклами - я знаю. А как это сделать так, чтобы сократить обращения к базе. Или как оптимальней? |
|||
|
||||
| Nigel |
|
|||
|
познаю мир ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 20.11.2007 Репутация: 7 Всего: 19 |
Оптимальней nested sets использовать. В списках смежности через рекурсию придется делать. Хлебные крошки делаешь?
|
|||
|
||||
| SneG0K |
|
|||
|
Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
Да, хлебные крошки.
Спасибо, уже читаю о nested seats, пока правда мало понимаю, но думаю дойдет |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
думаю, хлебные крошки с глубиной вложенности 3-4 уровня не стоят смены модели хранения.
как только количество запросов к БД станет действительно узким местом, у тебя уже давно должно быть настроено кеширование блоков целиком. если "просто хочешь" уменьшить количество запросов: сделай выборку за раз не только элемента, но, скажем, дополнительно родителя и прародителя(через union all соедини в один три запроса). тогда типичное количество запросов будет два, а минимальное - один же. |
|||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
SneG0K, это именно то что нужно. На самом деле в нем нечего сложного нет, до тех пор пока не нужно перемещать\сортировать ветки -------------------- Amazing |
|||
|
||||
| SneG0K |
|
|||
|
Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 7 Всего: 54 |
||||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
если нужно только родители, то можно по одному запросу посмотреть вверх (ну и прокешировать из)
или по несколько через несколько LEFT JOIN (если там родителя нету, то будет пустое... структуру перебрать удалить лишнее... т.е. если примерно от 8 до 18 родителей, то их можно выбрать 2-я запросами) еще кроме, nested sets, в PgSQL есть встроенное дополнение для работы с древовидными структурами... Это сообщение отредактировал(а) gcc - 30.10.2010, 02:02 |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |