Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оптимизация: как бы это всё утоптать?
 
 автор: Dimanoss   (15.05.2008 в 15:17)   письмо автору
 
 

Набросал статистический модуль. Всё работает, но сильно удручает скорость запросов (по полминуты и даже больше). За основу взял довольно простое решение - в PHPшном цикле опрашиваю базу. Думаю, можно это решить по другому, уже средствами MySQL, но не силён в этом.

Итак: к примеру, я собираю месячную статистику, выводя всякие там цифирки по дням.


SELECT Promo, COUNT(*) AS Downloads FROM Users WHERE Val_Date>0 AND logind LIKE 
findDate[$i]['start'] . "%'
  -  тут у меня торчит конкретная дата 
GROUP BY Promo


и так в цикле, например, 31 раз. Из-за этого выходит черезчур тяжеловесно. Можно ведь это в один запрос упаковать?

   
 
 автор: Trianon   (15.05.2008 в 15:48)   письмо автору
 
   для: Dimanoss   (15.05.2008 в 15:17)
 

Почти наверняка можно.
Но вот то, что Вы написали - понять нельзя.
Запрос непонятно на каком языке.
SELECT вроде из SQL
[$i]['start'] - из php
"%' - вообще невесть на чем.
Неплохо также было привести некую информацию о структуре таблицы и о смысле запрашиваемой аналитики.

   
 
 автор: Dimanoss   (15.05.2008 в 15:53)   письмо автору
 
   для: Trianon   (15.05.2008 в 15:48)
 

уточню. Так оно выглядит в запросе:


SELECT Promo, COUNT(*) AS Downloads FROM Users WHERE Val_Date>0 AND logind LIKE '2008-05-15%' GROUP BY Promo

   
 
 автор: Trianon   (15.05.2008 в 16:13)   письмо автору
 
   для: Dimanoss   (15.05.2008 в 15:53)
 

А если запросить что-то вроде
SELECT Promo, LEFT(logind, 10) AS `day`,  COUNT(*) AS Downloads 
  FROM Users 
     WHERE Val_Date>0  
  GROUP BY Promo, day
  HAVING `day` BETWEEN '2008-05-01' AND '2008-05-15' 
  ORDER BY Promo, `day` 

?

   
 
 автор: Dimanoss   (15.05.2008 в 16:40)   письмо автору
 
   для: Trianon   (15.05.2008 в 16:13)
 

Спасибо, выборка работает, осталось ток обработку её написать. Ток единственный вопрос: смущает меня LEFT(logind, 10) - что такое в этом случае "10"?

   
 
 автор: Trianon   (15.05.2008 в 16:48)   письмо автору
 
   для: Dimanoss   (15.05.2008 в 16:40)
 

10 - это второй параметр mySQL-функции LEFT()
Если LEFT Вас не смущает, значит описание этой функции в руководстве по MySQL Вы нашли.

   
 
 автор: Dimanoss   (15.05.2008 в 17:25)   письмо автору
 
   для: Trianon   (15.05.2008 в 16:48)
 

упс.... брякнул по невнимательности - в башке LEFT JOIN торчал

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования