Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Условия в циклах (запросы к БД, подсчет файлов и т.д.)
 
 автор: ProtoTeeP   (28.10.2007 в 09:46)   письмо автору
 
 


<?
for($MS_res=array(); $row=mysql_fetch_assoc($sql); $MS_res[]=$row);
?>


этот код взят с учебника.
Говорят самый лучший вариант.
Но я не могу согласиться. Если нам нужно сделать выборку из 1000 записей это будет очень тяжело. т.е. будет 1000 запросов к БД. хорошо если сам запрос будет простым, а если там будет сложные условия? и в запросе несколько таблиц?

практически тоже самое, я вижу одного "хорошего" программиста (мой друг):


<?
// Примерный код
$path 'files/mp3/';
for(
$i=0;$i<count(glob($path.'*.mp3'));$i++)
{
echo....
}
?>


я все это говорю к тому, что цикл, как известно, сначала проверяет условие. а в послед примере там подсчет кол-ва mp3-файлов... т.е. каждый круг, цикл будет делать запрос на кол-во файлов... это будет очень тормозить программу. Он же говорить что разницы нет.

Я думаю, так будет лучше:

$path = 'files/mp3/';
$count_files = count(glob($path.'*.mp3'));
for($i=0;$i<$count_files;$i++)
{
echo....
}


Вот такой у нас стоит спор с этим программером. Ошибаюсь ли я или нет?

   
 
 автор: cheops   (28.10.2007 в 10:11)   письмо автору
 
   для: ProtoTeeP   (28.10.2007 в 09:46)
 

>Но я не могу согласиться. Если нам нужно сделать выборку из 1000 записей это будет очень
>тяжело. т.е. будет 1000 запросов к БД.
1) Не к базе данных, а к результирующей таблице в оперативной памяти.
2) Для ограничения количества записей используется конструкция LIMIT SQL-запроса, а не уловки со стороны PHP - иначе MySQL всё равно придётся извлекать 1000 записей и отправлять их PHP.
3) Если вы ошибётесь с условием - можете получить множество ошибок предупреждений.

Как я понял речь всё же не о MySQL, а об обходе директории - в этом случае ваш вариант, конечно лучше. В случае MySQL - это не так - так как потери производительности не происходит.

   
 
 автор: ProtoTeeP   (28.10.2007 в 10:29)   письмо автору
 
   для: cheops   (28.10.2007 в 10:11)
 

т.е. Вы хотите сказать, что нет разницы между:

1) Если я получу данные от БД в виде 1 массива со всеми данными, при 1 запросе.

2) И если буду получать «кусками» данные, несколькими запросами к оперативной памяти.
(используя, mysql_fetch_assoc($sql); )

Т.е. в 1 случай идет 1 запрос и сразу получение всех данных, во 2 же случаи мы занимаем оперативную память на более длительный срок.

или я опять что-то напутал?

   
 
 автор: EXP   (28.10.2007 в 12:13)   письмо автору
 
   для: ProtoTeeP   (28.10.2007 в 10:29)
 

Однажды заметил что получение массива функцией glob и потом обработка в цикле занимает больше времени чем обработка в цикле while просто читающем дирректорию.
Непойму что сравнивается , чтение списка файлов из файловой системы и из базы данных ?

   
 
 автор: Unkind   (28.10.2007 в 12:19)   письмо автору
 
   для: ProtoTeeP   (28.10.2007 в 10:29)
 

> т.е. Вы хотите сказать, что нет разницы между:
Есть, конечно, есть. Ваш друг глубоко заблуждается. Условие проверяется каждый раз, естественно.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования