Доброго времени. Пишу рекурсивную функцию вывода древовидного меню, много читал по этой теме на разных форумах. Хотя задача достаточно тривиальна, возникли трудности с алгоритмом. Многие пишут, что менее ресурсоёмкой была бы реализация такой функции, в которой идет перебор массива (в который выбрана таблица БД), нежели внутри функции обращаться к БД. Либо я неправильно понял, либо предлагают всю таблицу разом выбрать в массив, а потом уже разбирать его внутри функции.
Хорошо, как тогда выбрать всю таблицу в массив? Лично мне на ум приходит только цикл. Т.е., в каждой итерации цикла в массив добавляется следующая строка таблицы, пока не закончатся строки. Т.е., при каждой итерации будет запрос к БД. Чем функция хуже? Ведь по сути, то же самое. 50 страниц - 50 запросов к БД и в том и в другом случае.
Проясните пожалуйста новичку, может я чего не знаю?
1. Vinyl - 14 Марта, 2012 - 11:02:13 - перейти к сообщению
2. DlTA - 14 Марта, 2012 - 12:36:41 - перейти к сообщению
тут пример
http://php.su/functions/?mysql-fetch-assoc
выборка происходит в 1 запрос
а в цикле всего лишь данные перебрасываются в массив
http://php.su/functions/?mysql-fetch-assoc
выборка происходит в 1 запрос
а в цикле всего лишь данные перебрасываются в массив
3. Vinyl - 14 Марта, 2012 - 13:57:02 - перейти к сообщению
DlTA пишет:
тут пример
http://php.su/functions/?mysql-fetch-assoc
http://php.su/functions/?mysql-fetch-assoc
Ну я же так и описывал:
Vinyl пишет:
Т.е., в каждой итерации цикла в массив добавляется следующая строка таблицы, пока не закончатся строки
Т.е. запросом считается непосредственно SELECT, так? И если while пройдет по 50 записям в таблице, то это сожрет меньше ресурсов, чем 50 SELECT`ов, так?
4. DelphinPRO - 14 Марта, 2012 - 13:58:22 - перейти к сообщению
mysql-fetch-assoc - это обработка результата запроса
(Добавление)
ключевые поля в таблице меню id, parent_id, title
Выборка меню из базы
(Добавление)
ключевые поля в таблице меню id, parent_id, title
Выборка меню из базы
Спойлер (Отобразить)
формирование древовидной структуры из полученного массива:
Спойлер (Отобразить)
вывод в виде вложенных списков
Спойлер (Отобразить)