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
Форумы портала PHP.SU :: Версия для печати :: Запросы к БД и рекурсия
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Запросы к БД и рекурсия

Страниц (1): [1]
 

1. Vinyl - 14 Марта, 2012 - 11:02:13 - перейти к сообщению
Доброго времени. Пишу рекурсивную функцию вывода древовидного меню, много читал по этой теме на разных форумах. Хотя задача достаточно тривиальна, возникли трудности с алгоритмом. Многие пишут, что менее ресурсоёмкой была бы реализация такой функции, в которой идет перебор массива (в который выбрана таблица БД), нежели внутри функции обращаться к БД. Либо я неправильно понял, либо предлагают всю таблицу разом выбрать в массив, а потом уже разбирать его внутри функции.

Хорошо, как тогда выбрать всю таблицу в массив? Лично мне на ум приходит только цикл. Т.е., в каждой итерации цикла в массив добавляется следующая строка таблицы, пока не закончатся строки. Т.е., при каждой итерации будет запрос к БД. Чем функция хуже? Ведь по сути, то же самое. 50 страниц - 50 запросов к БД и в том и в другом случае.

Проясните пожалуйста новичку, может я чего не знаю?
2. DlTA - 14 Марта, 2012 - 12:36:41 - перейти к сообщению
тут пример
http://php.su/functions/?mysql-fetch-assoc
выборка происходит в 1 запрос
а в цикле всего лишь данные перебрасываются в массив
3. Vinyl - 14 Марта, 2012 - 13:57:02 - перейти к сообщению
DlTA пишет:
тут пример
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
Выборка меню из базы
Спойлер (Отобразить)


формирование древовидной структуры из полученного массива:
Спойлер (Отобразить)


вывод в виде вложенных списков
Спойлер (Отобразить)


код из рабочего проекта.
5. Vinyl - 18 Марта, 2012 - 21:42:43 - перейти к сообщению
Огромное спасибо! ("спасибо" нажать не могу, у меня сообщений недостаточно).
(Добавление)
Вот я не могу понять, $row = mysql_fetch_assoc($result) и $row = mysql_fetch_array($result, MYSQL_ASSOC) это одно и тоже? Если да, то в чем приоритет mysql_fetch_assoc? Более компактный код?
6. DelphinPRO - 18 Марта, 2012 - 22:33:00 - перейти к сообщению
вы все правильно понимаете Улыбка
7. Vinyl - 19 Марта, 2012 - 00:58:15 - перейти к сообщению
Благодарю!

 

Powered by ExBB FM 1.0 RC1