|
MySQL.RU - Webboard
Вернуться
Есть ли в MySQL циклы? (dAb) 07/03/2002 - 12:50:07
Re: Есть ли в MySQL циклы? (test) 07/03/2002 - 12:50:59
Re: Есть ли в MySQL циклы? (Василий) 07/03/2002 - 14:01:57
Re: Есть ли в MySQL циклы? (vitek) 08/03/2002 - 04:06:06
Re: Есть ли в MySQL циклы? (dAb) 11/03/2002 - 11:20:01
Re: Есть ли в MySQL циклы? (dAb) 11/03/2002 - 11:22:07
Re: и еще (dUb) 11/03/2002 - 11:28:08
Re: и еще (Василий) 11/03/2002 - 12:58:38
Re: и еще (vitek) 11/03/2002 - 18:14:49
Re: Корректно заданный вопрос ... (vitek) 11/03/2002 - 18:32:26
Re: Вдогонку (vitek) 11/03/2002 - 18:44:10
Re: Корректно заданный вопрос ... (dAb) 14/03/2002 - 08:25:15
Re: Корректно заданный вопрос ... (dAb) 14/03/2002 - 14:30:14
Re: Корректно заданный вопрос ... (dAb) 14/03/2002 - 14:31:47
Re: Корректно заданный вопрос ... (vitek) 14/03/2002 - 16:57:51
> Original message text:
> From: dAb - 07/03/2002 - 12:50:07
> Subject:Есть ли в MySQL циклы?
> -----------------
> вопрос: можно ли средствами MySQL в запросах реализовать какое-то подобие цикла?
> а то у меня возникла задача а обычными средствами в PHP она решается ООООчень долго
> привожу цикл из программы
>
> for ($x=0;$x<=$grafmx;$x++)
> {
> $tm1=(($time2-$time1)*$i/$grafmx)+$time1;
> $tm2=(($time2-$time1)*($i+1)/$grafmx)+$time1;
> //берем среднее значение из интервала tm1 - tm2
> $t=mysql_query("select avg(temp) from termo where time>=$tm1 and time<=$tm2");
> $y1=mysql_fetch_row($t);
> //здесь обрабатываем данные
> }
>
> grafmx=400
> и этот цикл тянет на 40 секунд !(((((
> Можно ли создать запрос возвращающий средние значения по всему интервалу?
>
From: Василий - 07/03/2002 - 14:01:57
Subject:Есть ли в MySQL циклы?
-----------------
Какое-то подобие - можно.
Но я думаю, увеличение будет незначительным.
Ты 400 раз выполняешь один и тот же запрос. Т.е. код внутри цикла выполняется за 0.1 сек, что на вполне приемлемом уровне.
При этом наибольшее время тратится на выполнение запроса MySQL и (возможно) обработку полученных данных на PHP. Я бы посоветовал посмотреть, сколько времени MySQL выполняет один такой запрос. Если порядка 0.1 секунды, то игра не стоит свеч. Большая часть времени тратится на выполнение запроса и тогда без разницы, кто делает цикл - MySQL или PHP.
Поле time, надеюсь, проиндексировано?
вот подобие цикла
SQL, который надо вызывать из PHP (для работы с датами, возможно, придется использовать соотв. функции MySQL)
@date1 := ...;
@date1 := ...;
@a := 0;
@grafmx := 400;
-- это вызывать 400 раз
@tm1 := (@date2 - @date1) * @a / @grafmx + @date1;
@tm2 := (@date2 - @date1) * (@a + 1) / @grafmx + @date1;
select avg(temp) from termo where time>=@tm1 and time<=@tm2;
@a := @a + 1;
что ещё можно посоветовать.
можно выкачивать все записи по порядку дат.
пробегать по ним в рнр и считать среднее. тогда весь расчет уложится в один проход по полученым данным. Примерно так. И думаю, это хорошо убыстрит.
$i = 0;
$k = 1;
$avg = 0;
$grafmx = 400;
$result = mysql_query("select temp from termo where time>=$time1 and time<=$time2 order by time";
while ($obj = mysql_fetch_object($result)) {
$tm1=(($time2-$time1)*$i/$grafmx)+$time1;
$tm2=(($time2-$time1)*($i+1)/$grafmx)+$time1;
if ($obj->temp >= $tm2){
$i = $i + 1;
$avg = $avg/$k;
// process avg
// end process
$k = 1;
$avg = 0;
}
else {
$avg = $avg + $obj->temp;
}
}
кроме того :
for ($x=0;$x<=$grafmx;$x++)
...
$tm1=(($time2-$time1)*$i/$grafmx)+$time1;
$tm2=(($time2-$time1)*($i+1)/$grafmx)+$time1;
- здесь $x имелся в виду, что ли, а не $i? иначе за каждый проход цикла
$tm1 и $tm2 одинаковы.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
2286
|
|