Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> циклы при выборке из базы, что предпочтительнее 
:(
    Опции темы
Gold Dragon
Дата 27.12.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Я почему-то пользуюсь for, просто по моему тут очень понятная конструкция да и последовательная. Но многие используют foreach. Видел ещё while

Хотелось бы услышать что предпочтительнее  использовать при выборки mysql_fetch_object, скорость да и вообще чем один лучше другого? И существует ли разница между mysql_fetch_array (при условии что используется MYSQL_ASSOС или MYSQL_NUM) и  mysql_fetch_object в разных циклах?







--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
skyboy
Дата 27.12.2007, 10:50 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(Gold Dragon @  27.12.2007,  09:32 Найти цитируемый пост)
И существует ли разница между mysql_fetch_array (при условии что используется MYSQL_ASSOС или MYSQL_NUM) и  mysql_fetch_object в разных циклах?

mysql_fetch_object в php.net:
Цитата

mysql_fetch_object() работает аналогично mysql_fetch_array(), с единственным отличием -- функция возвращает объект, вместо массива. Это, кроме всего прочего, означает, что вы сможете работать с полями только по имени колонок. Числа не могут быть свойствами объекта.

Вроде ж не спрятано.
Как и mysql_fetch_array, mysql_fetch_object возвращает false, когда все записи уже были обработаны.
Цитата(Gold Dragon @  27.12.2007,  09:32 Найти цитируемый пост)
Я почему-то пользуюсь for

речь о выборе новых записей или о перечислении полей? 
если о выборе новых записей(что противоречит упоминанию про foreach - при помощи foreach это никак не реализовать), то конструкция:
Код

$num= mysql_num_rows($query);
for($i= 0; $i< $num; $i++) {
 $row= mysql_fetch_array($query);
 ....
}

менее гибкая, чем
Код

while($row= mysql_fetch_array($query)) { 
 ....
}

хотя бы потому, что первый вариант невозможно использовать совместно с небуфферизированными запросами(mysql_unbuffered_query).
если ты говоришь про вариант:
Код

for($row= mysql_fetch_array($query); $row !== false; $row= mysql_fetch_array($query)) {
 ....
}
, то это дело вкуса, но выглядит менее читаемо, чем while.
если ты говоришь про перечисление полей в выбранной записи, то всяко foreach удобнее всего использовать foreach для перечисления, но я нечасто встречал задачи, где однотипно надо было обрабатывать разный поля одной записи.
PM MAIL   Вверх
MoLeX
Дата 27.12.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



Цитата(skyboy @  27.12.2007,  10:50 Найти цитируемый пост)
то это дело вкуса, но выглядит менее читаемо, чем while.
  smile 
лично я использую или for или while, но тут еще не тока дело вкуса, а привычки скорей всего)



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 27.12.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



я скорее всего говорил о выборке новых. smile

а скорость обработки for и while как-то различается?

а насчёт читабельности.. так я пишу так.. и вроде наоборот всё понятно smile
Код

//.......
$a = mysql_num_rows($r);
//.......
for ($i=0; $i<$a; $i++){
     $f = mysql_fetch_array($r);
     //......
}



ЗЫ
Конечно большое спасибо за выдержку из правил.. Народ, ну может хватит тыкать носом? НАФИГА тогда форум нужен, если АБСОЛЮТНО(!) на любой вопрос есть пункт в доках! Тогда давайте просто делать Вопрос->Номер пункта документации. Я то спрашиваю личное мнение, наработанную практику, удобства того или иного.... Ну не могу я всё знать и везде всё прочитать. Да и возможности иногда нет. Иногда просто не знаешь как искать, по каким ключевым фразам..



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 27.12.2007, 17:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



Я обычно пользуюсь while, если число записей не требуется мне для другой цели (напр., вывода альтернативного шаблона в случае пустой выборки). Принцип бритвы Оккама - если без какого-то действия (напр., mysql_num_rows) можно обойтись, я стараюсь обходиться.

Что же до скорости, то, имхо, если различия и есть, то они теряются на фоне времени выполнения самого запроса. Имхо, в варианте с for действий выполняется побольше (проверяем искусственное условие и делаем fetch в любом случае, вместо того чтоб воспользоваться в условии побочным эффектом - логическим значением - того же самого фетча, как в случае с while). Если мне до зарезу нужны микросекунды, я вообще юзаю while($f = mysql_fetch_row()) - типа самый быстрый smile. Но на практике, повторюсь, эта разница в 98% случаев не играет ни малейшей роли, так что можно делать так, как привычнее, удобнее и лучше совмещается с общей логикой системы.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.