Большая выборка

nw

Новичок
Большая выборка

Есть табличка, там что-то около 55 тыс записей.
Нужно перебрать в цикле каждую запись.
Схема по которой работаю обычна:

PHP:
$sql = "SELECT price, date, count, code, company_id FROM goods_prices_tbl WHERE price >0 ORDER BY date DESC LIMIT 10000";
Затем форичем (как вариант for) перебираю резалт. Так вот если LIMIT убрать, то до конца скрипт не дорабатывает (тайм_лимит php должно хватать).
Т.е. примерно на 30-ти тысячной итерации глохнет (несколько секунд работы). Это просто при переборе, никаких операций внутри цикла не производится (кроме echo номера каждой тысячной итерации).
Вопрос:
Как перебрать все записи? В чём подвох может быть? Перебрать нужно в одном скрипте.
Пробовал вариант - резалт перебирать в двух циклах (т.е. первый резалт с LIMIT 0, 27000, второй резалт LIMIT 27001,27000) ) с free_result() после каждого перебора. В этом случае первые 27 тыс отрабатывал нормально, а во втором - только тысячи 3 (т.е. в итоге те же 30).

А то что-то я глючу :)

-~{}~ 17.12.07 19:09:

Не думаю что дело во фреймворке, но используется CodeIgniter
 

Mols

Новичок
Поиграйтесь с лимитом доступной для ПХП оперативной памяти. Скорее всего в этом проблема.
 

vovanium

Новичок
Поиграйтесь с лимитом доступной для ПХП оперативной памяти
Если бы была проблема с памятью то запрос с LIMIT 27001,27000 нормально бы выполнился. Больше похоже, что у него под его условие подпадают только 30 тысяч записей.

Кроме того учитывая как написан лимит, с mysql он явно не очень дружит ;)
 

Mols

Новичок
vovanium
Запрос у него выполняется... и первый и второй. Он их просто последовательно в одном скрипте делает. А проблема возникает при обработке данных из ответа МуСКЛ, причем второго ответа(или в более общем случае при обработке определённого числа выбранных из базы строк). Это как раз меня и натолкнуло на мысль о том, что происходит превышение лимита доступной оперативной памяти и как следствие принудительное завершение выполнения скрипта.
И вообще.... до ответа топикстартера это всё гадание на кофейной гуще. )))
 

nw

Новичок
Mols
Да, проблема была в этом, спасибо. Как-то я зациклился на тайм-лимите и про мемори-лимит совсем не подумал. Надо больше отдыхать :)
Хотя, вроде, фри_резалт должно было помогать в таком случае. Остаётся думать, что второй резалт был больше первого (не по количеству строк, оно одинаково, а по количеству выбранных данных и в отличие от первого не пролазил в ограничение памяти).

-~{}~ 18.12.07 04:18:

Кроме того учитывая как написан лимит
Как бы вы рекомендовали написать лимит?
 

zerkms

TDD infected
Команда форума
я конечно дико извиняюсь, но кроме как отвечать phpfaq.ru/debug тут нельзя
скрипт просто так не "глохнет" - он говорит причину
 

nw

Новичок
zerkms
посыпаю голову пеплом :)
ини_сет оказался разрешён
 
Сверху