| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Рекурсия при выборки из БД |
| Автор: supercelt 12.12.2010, 16:01 | ||
| Пишу для жумлы выборку секций и категорий из бд, в виде дерева. В таблице категорий есть поле parent_id но оно не задействовано. Но вот хотелось бы его использовать. Я написал функцию, кторая работает, но с рекурсией, нет. Если убрать строчку $return .= getParentTree($listing->c_parent); то всё выводит, но только родителей. А если строку не убирать, вместо сайта вообще белый экран. В чём тут ошибка?
|
| Автор: SneG0K 12.12.2010, 19:36 |
| У тебя скрипт уходит в бесконечную рекурсию и умирает бедняга... Лучше извлеки все записи из БД (один запрос), а потом на основе всех данных построй дерево и закешируй его. |
| Автор: supercelt 12.12.2010, 19:47 | ||||
| Я это как раз и пытался сделать. Решил, что надо одним запросом всё изъять и в массив это. А потом работать уже с массивом. После изъятия из базы получилось вот что: Это в $array
И теперь я работаю с массивом
А страница была белая потому что вместо getParentTree2($array, $row['c_parent']) нужно было modTreeSC::getParentTree2($array, $row['c_parent']) но проблеам та же, теперь вместо белого экрана браузер просто сбрасывает соединение, как буд-то хоста нет. Если убрать $res .= modTreeSC::getParentTree2($array, $row['c_parent']); то всё норм. Не понимаю где ошибка. Например в модуле mainmenu сделана такая же рекурсия, однако там всё работает |