![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
SDEVIL |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 30.10.2006 Репутация: нет Всего: 1 |
Есть такая таблица:
В которой хранятся разделы каталога. Можно как либо одним запросом получить список разделов у которых `parent`=0, и одновременно для разделов подсчитать количество потомков? Т.е. к примеру:
Что бы в результате было следующее
Где последняя цифра это количество подразделов у родительского раздела. Все это вывести в одном запросе... --------------------
Подпись сбежала к другому юзверю.... |
||||||
|
|||||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
? |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Каков максимальный уровень вложенности структуры? Он вообще лимитирован?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
||||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Хранимка с этим справится без всякой рекурсии. Впрочем, если уровень вложенности не лимитирован или просто высок - то следует изменить структуру и добавить поле уровня. Или вообще перейти на nested set. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
||||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Глубина, не лимитированная теоретически, тем не менее в каждый отдельно взятый момент времени лимитирована текущим наполнением таблицы.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
бла бла бла.... хорошо, на данный момент глубина равна N, спустя некоторое время равна M, еще через 3 часа равна M - 5. как получить все уровни вложенности без применения рекурсии? |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Я так понимаю Akina, имел в виду что глубина иерархии результирующего набора запроса - величина постоянная. любой рекурсивный алгоритм может быть реализован иттерационно. Это аксиома ![]() Это сообщение отредактировал(а) Zloxa - 3.6.2010, 17:00 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
реализуется, только некоторые задачи реализуются через одно место, потому их пишут через рекурсию ![]()
? как она может быть постоянной? есть дерево
добавляем еще один элемент в node1_2_1, глубина меняется, или мы о разном говорим? |
||||||
|
|||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
но не в результирующем наборе, который получен до добавления. Я не знаю точно как это делается в маське, скорее всего ты не сможешь проинсертиться, встанешь на блокировке, пока весь набор данных не отофетчишь. хотяя... я всегда забываю о грязных чтениях..... -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
мы кажется совсем о разных вещах говорим вернемся к вопросу напишем для этого функцию
принимает node, считает сколько у него subnode-ов, не непосредственно под ним, а вообще, во всю глубину. сделали запрос
это же классическая задача итерации по дереву. SDEVIL стоит почитать http://dev.mysql.com/tech-resources/articl...hical-data.html Это сообщение отредактировал(а) azesmcar - 3.6.2010, 17:21 |
||||
|
|||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Имхо о разном. Ибо
Меняется? вроде меняется. Однако в тот момент, когда мы посылаем серверу запрос, вложенность равна некоему вполне определённому (пусть нам и неизвестному) ЗЮ. И это ЗЮ мы выясним в процессе работы нашего запроса/процедуры/прочего (буде оно нам надо - а коли нет, будем просто итерачить или рекурсить, пока вложенность не закончится). Применительно к именно поставленной задаче - посчитать потомков - рекурсия как раз менее предпочтительна, особенно в случае неопределённой вложенности. Итерации просто будут плюсить наш единственный на всю процедуру каунтер, в то время как рекурсия вынуждена будет гонять текущее неполное количество сквозь стек, чтобы на каждом шаге добавлять количество с очередной ветки очередного уровня. А вот функция может быть только итеративная, в отличие от процедур, которые допускают рекурсию... PS. Правда, у меня простейшая рекурсивная процедура запросто валила сервер где-то на уровне вложенности порядка 80... может, конечно, что не донастроил или ресурсов не хватило - доки говорят, что уж 200-то должно было выдержать. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |