Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Не правильно работает рекурсивная функция [2]
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Баланс между "выбрать всё, построить в приложении" и "выбрать только нужное, запросить рекурсивно" никогда не будет найден. Потому что это попытка выбрать из двух плохих вариантов.
Если нужно построение деревьев, особенно если оно нужно часто, настоятельно рекомендую изменить структуру таблицы и создать таблицу-замыкание (closure table). Достаточно неплохой и краткий обзор можете найти здесь.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DelphinPRO
Отправлено: 13 Февраля, 2014 - 15:27:59
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
А чем плохо выбрать все, если все равно эти данные нужно будет отобразить?
----- Чем больше узнаю, тем больше я не знаю.
EuGen
Отправлено: 13 Февраля, 2014 - 15:44:19
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DelphinPRO пишет:
А чем плохо выбрать все, если все равно эти данные нужно будет отобразить?
Можно либо "выбрать только то, что нужно отобразить" (то есть - рекурсивно сделать несколько запросов), либо "выбрать всё", а в приложении "разобраться, что вывести". Но первый случай плох тем, что имеем множество запросов на одну операцию построения дерева, а второй - тем, что при больших объёмах таблицы "выбрать всё" - это плохая идея.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.