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 :: Запросы к БД и рекурсия

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Снижение нагрузки на ЦП путем перебора массива вместо запросов внутри рекурсивной функции
Vinyl
Отправлено: 14 Марта, 2012 - 11:02:13
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




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

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

Проясните пожалуйста новичку, может я чего не знаю?


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DlTA
Отправлено: 14 Марта, 2012 - 12:36:41
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




тут пример
http://php.su/functions/?mysql-fetch-assoc
выборка происходит в 1 запрос
а в цикле всего лишь данные перебрасываются в массив
 
 Top
Vinyl
Отправлено: 14 Марта, 2012 - 13:57:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




DlTA пишет:
тут пример
http://php.su/functions/?mysql-fetch-assoc


Ну я же так и описывал:

Vinyl пишет:
Т.е., в каждой итерации цикла в массив добавляется следующая строка таблицы, пока не закончатся строки


Т.е. запросом считается непосредственно SELECT, так? И если while пройдет по 50 записям в таблице, то это сожрет меньше ресурсов, чем 50 SELECT`ов, так?


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DelphinPRO
Отправлено: 14 Марта, 2012 - 13:58:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




mysql-fetch-assoc - это обработка результата запроса
(Добавление)
ключевые поля в таблице меню id, parent_id, title
Выборка меню из базы
Спойлер (Отобразить)


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


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


код из рабочего проекта.

(Отредактировано автором: 14 Марта, 2012 - 14:08:31)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Vinyl
Отправлено: 18 Марта, 2012 - 21:42:43
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




Огромное спасибо! ("спасибо" нажать не могу, у меня сообщений недостаточно).
(Добавление)
Вот я не могу понять, $row = mysql_fetch_assoc($result) и $row = mysql_fetch_array($result, MYSQL_ASSOC) это одно и тоже? Если да, то в чем приоритет mysql_fetch_assoc? Более компактный код?


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
DelphinPRO
Отправлено: 18 Марта, 2012 - 22:33:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




вы все правильно понимаете Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Vinyl
Отправлено: 19 Марта, 2012 - 00:58:15
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




Благодарю!


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB