[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос к БД в цикле
Athlete
Подскажите, делаю запрос в цикле:
PHP
$n=count($arr_beton);
for (
$i=0$i<=$n$i++)
{
$sql.$i = ("SELECT SUM(cube) FROM upp_ttn WHERE to_days(date)>=to_days(curdate())-5 AND pokup=0 AND rastvor=1 AND marka=$arr_beton[$i]");
$result.$i mysql_query($sql.$i);
$summ.$i mysql_result($result.$i,0);
}


Во время выполнения скрипта страница не грузится, процессор занят на 80%, похоже цикл повторяется бесконечно, в чем моя ошибка? Задача такая: получаю количество элементов массива и делаю запросы исходя из количества элементов, записываю данные в переменную $summ.$i, где $i - номер элемента массива.



Спустя 27 минут, 27 секунд (4.06.2009 - 06:45) Kuliev написал(а):
Athlete
PHP
$n=count($arr_beton);

for ($i=0; $i$n; $i++)
{

$sql = ("SELECT SUM(cube) FROM upp_ttn WHERE to_days(date)>=to_days(curdate())-5 AND pokup=0 AND rastvor=1 AND marka='".$arr_beton[$i]."'");

$result = mysql_query($sql.$i);
$summ[] = mysql_result($result,0);
}

echo "<pre>";
print_r($summ);


Вот только мускул у тебя не сдохнет от запросов в цикле...

Спустя 17 минут, 59 секунд (4.06.2009 - 07:03) Athlete написал(а):
ругается на строку
PHP
$summ[]= mysql_result($result3,0);


Warning: mysql_result(): supplied argument is not a valid MySQL result resource in W:\home\upp\www\components\com_reestrv\userpages\index.php on line 27

Fatal error: [] operator not supported for strings in W:\home\upp\www\components\com_reestrv\userpages\index.php on line 27

Спустя 30 минут, 52 секунды (4.06.2009 - 07:34) Kuliev написал(а):
Athlete
Проглядел
PHP
$n=count($arr_beton);

for (
$i=0$i$n$i++)
{

$sql = ("SELECT SUM(cube) AS cube FROM upp_ttn WHERE to_days(date)>=to_days(curdate())-5 AND pokup=0 AND rastvor=1 AND marka='".$arr_beton[$i]."'");

$result mysql_query($sql);
$row mysql_fetch_assoc($result);

$summ[] = $row['cube'];
}

echo 
"<pre>";
print_r($summ);


Спустя 6 минут, 46 секунд (4.06.2009 - 07:40) Athlete написал(а):
Цитата
Вот только мускул у тебя не сдохнет от запросов в цикле...

Больше 10 запросов в цикле не будет, авось и не умрет, спасибо за помощь!

Спустя 28 минут, 11 секунд (4.06.2009 - 08:08) sergeiss написал(а):
А зачем тут цикл вообще? Судя по тексту, автор где-то берет марки бетона (целые числа) и находит сумму по одной из колонок, с учетом некоторых условий.
Для решения таких задач как раз имеется GROUP BY.

Для начала надо создать строку с перечнем марок (можно и в цикле smile.gif), чтобы в результате было примерно так (записано в символьную переменную):
PHP
$marka=(300350500);
.... 
// запрос
$sql "SELECT marka, SUM(cube) 
FROM upp_ttn 
WHERE to_days(date)>=to_days(curdate())-5 AND pokup=0 AND rastvor=1 AND marka in $marka
GROUP BY marka"
;
$result mysql_query($sql);
// а вот уже далее надо сделать цикл чтения марки бетона и суммы (объем, как я понял); и там уже делай с данными всё, что хочешь
while( $row=mysql_fetch_assoc($result) )
{
....
}

Спустя 12 минут, 35 секунд (4.06.2009 - 08:21) glock18 написал(а):
10 запросов/цикл * 10 пользователей онлайн = 100 запросов к базе на http запрос.
10 запросов/цикл * 100 пользователей онлайн = 1000 запросов к базе на http запрос.

продолжать?))))

будет не 10 запросов, а фактически гораздо больше.

Спустя 2 минуты, 34 секунды (4.06.2009 - 08:24) glock18 написал(а):
sergeiss
Он считает общую сумму. Поэтому я думаю, что можно даже так:

PHP
$marka=(300350500);
.... 
// запрос
$sql "SELECT SUM(cube) AS summ
FROM upp_ttn 
WHERE to_days(date)>=to_days(curdate())-5 AND pokup=0 AND rastvor=1 AND marka in $marka"
;
$result mysql_query($sql);
// а вот уже далее надо сделать цикл чтения марки бетона и суммы (объем, как я понял); и там уже делай с данными всё, что хочешь
if( $row=mysql_fetch_assoc($result) )
{
$summ $row['summ'];
}

Спустя 2 минуты, 10 секунд (4.06.2009 - 08:26) sergeiss написал(а):
glock18 - если общая сумма, то да, именно так smile.gif
И насчет "AS summ" ты прав, я не подумал rolleyes.gif

Спустя 2 часа, 49 минут, 21 секунда (4.06.2009 - 11:15) Athlete написал(а):
Цитата (sergeiss @ 4.06.2009 - 05:08)
Для начала надо создать строку с перечнем марок (можно и в цикле smile.gif), чтобы в результате было примерно так (записано в символьную переменную):
PHP
$marka=(300, 350, 500);
....
 
// запрос
$sql = "SELECT marka, SUM(cube) 
FROM upp_ttn 
WHERE to_days(date)>=to_days(curdate())-5 AND pokup=0 AND rastvor=1 AND marka in $marka
GROUP BY marka"
;
$result = mysql_query($sql);
// а вот уже далее надо сделать цикл чтения марки бетона и суммы (объем, как я понял); и там уже делай с данными всё, что хочешь
while( $row=mysql_fetch_assoc($result) )
{
....
}


Мне нужны те марки бетона/раствора, которые отгрузили за неделю, а это каждый раз разные марки, поэтому делаю запрос к БД и беру оттуда отгруженные марки. По поводу нескольких пользователей и обращений к БД, такого не будет, ибо там, куда это делается 1 комп и сети нет как таковой smile.gif. Но в любом случае спасибо за обсуждение и советы

Спустя 1 час, 6 минут, 17 секунд (4.06.2009 - 12:21) glock18 написал(а):
Цитата
Мне нужны те марки бетона/раствора, которые отгрузили за неделю, а это каждый раз разные марки, поэтому делаю запрос к БД и беру оттуда отгруженные марки


Странно ты это делаешь biggrin.gif По тому коду, что ты приводил можно было только подумать, что ты сумму каких-то марок считаешь. А запрос не показал, которым ты выбирал марки эти.

В общем, делай как sergeiss прописал, только убери условие
marka in $marka

sergeiss
Все могут не углядеть, а ведь на самом деле ты прав оказался biggrin.gif Твой пример лучше подходит smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.