Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Создание сложной выборки из MySQL

Ответить
Настройки темы
Создание сложной выборки из MySQL

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


есть:
Код: Выделить весь код
  $MaxByte = mysql_fetch_array(mysql_query('SELECT sum(l.ByteSent) as Max
                                              FROM logs as l, brouser as b
                                             WHERE l.Date >= "'.$StartDate.'"
                                               AND l.Date <= "'.$EndDate.'"
                                               AND ( '.$r.' )
                                               AND b.id=l.Brouser
                                          GROUP BY l.QueryString, l.Result
                                          ORDER BY Max DESC;')) or print mysql_error();

  $MaxCount = mysql_fetch_array(mysql_query('SELECT count(*) as Max
                                               FROM logs as l, brouser as b
                                              WHERE l.Date >= "'.$StartDate.'"
                                                AND l.Date <= "'.$EndDate.'"
                                                AND ( '.$r.' )
                                                AND b.id=l.Brouser
                                           GROUP BY l.QueryString, l.Result
                                           ORDER BY Max DESC;')) or print mysql_error();

  if( isset( $HTTP_GET_VARS['cuturl'] ) )
  $QueryStringList = mysql_query('SELECT IF( LOCATE("?", l.QueryString) = 0, l.QueryString, LEFT(l.QueryString, LOCATE("?", l.QueryString)  - 1) ) as QueryString,
                                  count(*) as Count,
                                  sum(l.ByteSent) as AllByteSent,
                                  l.Result,
                                  sum(l.ByteSent) / '.$MaxByte['Max'].' as prb,
                                  count(*) / '.$MaxCount['Max'].' as prc
                             FROM logs as l, brouser as b
                            WHERE l.Date >= "'.$StartDate.'"
                              AND l.Date <= "'.$EndDate.'"
                              AND ( '.$r.' )
                              AND b.id=l.Brouser
                         GROUP BY l.QueryString, l.Result
                         '.$sort.';') or print mysql_error();
  else
  $QueryStringList = mysql_query('SELECT l.QueryString as QueryString,
                                  count(*) as Count,
                                  sum(l.ByteSent) as AllByteSent,
                                  l.Result,
                                  sum(l.ByteSent) / '.$MaxByte['Max'].' as prb,
                                  count(*) / '.$MaxCount['Max'].' as prc
                             FROM logs as l, brouser as b
                            WHERE l.Date >= "'.$StartDate.'"
                              AND l.Date <= "'.$EndDate.'"
                              AND ( '.$r.' )
                              AND b.id=l.Brouser
                         GROUP BY l.QueryString, l.Result
                         '.$sort.';') or print mysql_error();
как это можно про оптимизировать?

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 22:13, 16-06-2004

 
mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


первый запрос со вторым объединить
(вообще всегда все, что можно сделать средствами SQL не надо перекладывать на PHP)
ну, а дальше в зависимости от того, как выглядит структура данных, сиречь таблицы. Может уже и некуда оптимизировать
Ты  EXPLAIN - ом все это хозяйство смотрел?

Отправлено: 22:55, 16-06-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


mar
первый запрос со вторым объединьто не получится!
просто не получится, а если у тебя получится то я буду очень за тебя рад!

mar
может ты выскажешь идею как их можно объединить?

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 23:12, 16-06-2004 | #3

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


SELECT sum(l.ByteSent) as Max_byte,  count(*) as Max_count
.......
order by одно и другое. Или в этом и дело? Тогда UNION использовать

Отправлено: 23:17, 16-06-2004 | #4


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


mar
нужно как SELECT sum(l.ByteSent) as Max_byte,  count(*) as Max_count
но при этом order by одно и другое даст совсем не то!

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 23:21, 16-06-2004 | #5

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


UNION - в одном случае order by одно, в другом - другое. Или mysql этого не умеет?

Отправлено: 09:56, 18-06-2004 | #6


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


mar
в общем я все попробовал и пришол к выводу:

если выборки из одной таблици то лучьше делать два отдельных запроса причем без LIMIT, если выборки из разных, но быстрее один запрос с LIMIT.

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 19:51, 18-06-2004 | #7

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


Vlad Drakula
ну, с хорошим limit-ом, конечно, всегда все быстрее И вообще все хорошо, что хорошо (судя по соседнему топику ) кончается

Отправлено: 21:41, 18-06-2004 | #8


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


mar
а вот в том и дело!!!
я тоже сначала не поверил, нопотом провел несколько тестов с замером скорости.

сейчас я пишу статью об оптимизации MySQL, возможно к выходным закончу.

насапом деле половуну верменипотраченного на оптимизацию я трачу на чистое шаманство!

так на пример если между GROUP BY и ORDER BY есть перенос сторки то это в моих запросах приводин к стабильному увеличению времени на 0,01с, а для WHERE и AND все в точности до наоборот!

причем это на каждом сочитани в запросе!

но самое паганое это винда... от ее настроения зависит слишком многое...
я сейчас подумываю о том чтобы обзавестись отдельным компом под линуксом для размещения на нем веб сервера.

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 22:12, 18-06-2004 | #9

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


Vlad Drakula
ну насчет перевода строк и прочего... Странно это все как-то.
Ты из командной строки работаешь? или каким-нибудь phpmyадмином? или это запросы в php-ых скриптах.

Отправлено: 00:14, 19-06-2004 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Создание сложной выборки из MySQL

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MySQL - [решено] Создание mySQL aninimous Программирование и базы данных 7 09-09-2009 10:41
MySQL - Создание MySQL БД с фильмами. BugZZ Программирование и базы данных 11 18-11-2008 01:16
MySQL - Создание БД в MySQL darksmoke Программирование и базы данных 7 06-04-2008 19:24
Mysql, оптимизация таблицы (создание индексов) ivank Вебмастеру 7 07-03-2007 17:47
создание ячеек не ограниченной длинны в MySQL Vlad Drakula Вебмастеру 1 10-07-2003 00:58




 
Переход