|
|
|
|
<?
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....
}
|
Вот такой у нас стоит спор с этим программером. Ошибаюсь ли я или нет? | |
|
|
|
|
|
|
|
для: ProtoTeeP
(28.10.2007 в 09:46)
| | >Но я не могу согласиться. Если нам нужно сделать выборку из 1000 записей это будет очень
>тяжело. т.е. будет 1000 запросов к БД.
1) Не к базе данных, а к результирующей таблице в оперативной памяти.
2) Для ограничения количества записей используется конструкция LIMIT SQL-запроса, а не уловки со стороны PHP - иначе MySQL всё равно придётся извлекать 1000 записей и отправлять их PHP.
3) Если вы ошибётесь с условием - можете получить множество ошибок предупреждений.
Как я понял речь всё же не о MySQL, а об обходе директории - в этом случае ваш вариант, конечно лучше. В случае MySQL - это не так - так как потери производительности не происходит. | |
|
|
|
|
|
|
|
для: cheops
(28.10.2007 в 10:11)
| | т.е. Вы хотите сказать, что нет разницы между:
1) Если я получу данные от БД в виде 1 массива со всеми данными, при 1 запросе.
2) И если буду получать «кусками» данные, несколькими запросами к оперативной памяти.
(используя, mysql_fetch_assoc($sql); )
Т.е. в 1 случай идет 1 запрос и сразу получение всех данных, во 2 же случаи мы занимаем оперативную память на более длительный срок.
или я опять что-то напутал? | |
|
|
|
|
|
|
|
для: ProtoTeeP
(28.10.2007 в 10:29)
| | Однажды заметил что получение массива функцией glob и потом обработка в цикле занимает больше времени чем обработка в цикле while просто читающем дирректорию.
Непойму что сравнивается , чтение списка файлов из файловой системы и из базы данных ? | |
|
|
|
|
|
|
|
для: ProtoTeeP
(28.10.2007 в 10:29)
| | > т.е. Вы хотите сказать, что нет разницы между:
Есть, конечно, есть. Ваш друг глубоко заблуждается. Условие проверяется каждый раз, естественно. | |
|
|
|