Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
2286



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |