|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Создание сложной выборки из MySQL |
|
|
Создание сложной выборки из MySQL
|
Ночной странник Сообщения: 4050 |
Профиль | Сайт | Отправить 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 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать первый запрос со вторым объединить
(вообще всегда все, что можно сделать средствами SQL не надо перекладывать на PHP) ну, а дальше в зависимости от того, как выглядит структура данных, сиречь таблицы. Может уже и некуда оптимизировать Ты EXPLAIN - ом все это хозяйство смотрел? |
Отправлено: 22:55, 16-06-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать mar
первый запрос со вторым объединьто не получится! просто не получится, а если у тебя получится то я буду очень за тебя рад! mar может ты выскажешь идею как их можно объединить? |
------- Отправлено: 23:12, 16-06-2004 | #3 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать SELECT sum(l.ByteSent) as Max_byte, count(*) as Max_count
....... order by одно и другое. Или в этом и дело? Тогда UNION использовать |
Отправлено: 23:17, 16-06-2004 | #4 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать mar
нужно как SELECT sum(l.ByteSent) as Max_byte, count(*) as Max_count но при этом order by одно и другое даст совсем не то! |
|
------- Отправлено: 23:21, 16-06-2004 | #5 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать UNION - в одном случае order by одно, в другом - другое. Или mysql этого не умеет?
|
Отправлено: 09:56, 18-06-2004 | #6 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать mar
в общем я все попробовал и пришол к выводу: если выборки из одной таблици то лучьше делать два отдельных запроса причем без LIMIT, если выборки из разных, но быстрее один запрос с LIMIT. |
------- Отправлено: 19:51, 18-06-2004 | #7 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать Vlad Drakula
ну, с хорошим limit-ом, конечно, всегда все быстрее И вообще все хорошо, что хорошо (судя по соседнему топику ) кончается |
Отправлено: 21:41, 18-06-2004 | #8 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать mar
а вот в том и дело!!! я тоже сначала не поверил, нопотом провел несколько тестов с замером скорости. сейчас я пишу статью об оптимизации MySQL, возможно к выходным закончу. насапом деле половуну верменипотраченного на оптимизацию я трачу на чистое шаманство! так на пример если между GROUP BY и ORDER BY есть перенос сторки то это в моих запросах приводин к стабильному увеличению времени на 0,01с, а для WHERE и AND все в точности до наоборот! причем это на каждом сочитани в запросе! но самое паганое это винда... от ее настроения зависит слишком многое... я сейчас подумываю о том чтобы обзавестись отдельным компом под линуксом для размещения на нем веб сервера. |
------- Отправлено: 22:12, 18-06-2004 | #9 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать Vlad Drakula
ну насчет перевода строк и прочего... Странно это все как-то. Ты из командной строки работаешь? или каким-нибудь phpmyадмином? или это запросы в php-ых скриптах. |
Отправлено: 00:14, 19-06-2004 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|