|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » подсчет уникальных значаний поля в MySQl |
|
|
подсчет уникальных значаний поля в MySQl
|
Ночной странник Сообщения: 4050 |
у меня сейчас вот такой запрос:
$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(); $QueryStringList = mysql_query('SELECT IF( LOCATE("?", l.QueryString) = 0, l.QueryString, LEFT(l.QueryString, LOCATE("?", l.QueryString) - 1) ) as QueryString, count(*) as Count, ХХХ(IP) as nIp, 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:04, 16-06-2004 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать Vlad Drakula
а что xxx делать должна ![]() |
Отправлено: 22:57, 16-06-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать XXX() - нечто вроде count() только он ститает каличество уникальных значений, а не общее количество полей.
|
------- Отправлено: 23:09, 16-06-2004 | #3 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать count(IP) .... group by IP и JOIN это к основному запросу
(в postgres-е можно было бы запрос в запросе сделать ![]() |
Отправлено: 23:12, 16-06-2004 | #4 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать mar
честно говоря я с JOIN я не разобрался, может ты просветишь меня? |
|
------- Отправлено: 23:17, 16-06-2004 | #5 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать в общем виде JOIN - аналог выбора из двух таблиц, связанных между собой по каким-то полям (полю)
SELECT a.id, b.qq FROM a_table a, b_table_b WHERE a.column1=b.column2; можно записать, как * SELECT a.id, b.qq FROM a_table a JOIN b_table_b ON a.column1=b.column2; (или, по крайней мере в постгресе можно еще сказать USING c, если с - поле связи, одинаково названное в обоих таблицах. Дальше начинается самое интересное, когда можно присоединять не все данные одной, или другой таблицы LEFT JOIN, RIGHT JOIN Тут надо иметь в виду оптимизацию запросов в mysql Дальше еще интересней, но, честно говоря, по-моему, это не должно работать : в постгресе (и, по-моему вообще по SQL-стандартам, поправьте кто-нибудь, если не так ![]() SELECT ............ FROM participant_view p JOIN * *( * * *SELECT * * * *dst, src, * * * *0- sum(amount) AS amount, * *currency * * *FROM trlog * * *WHERE * * stamp <= '%s' AND status = %d GROUP BY dst, currency, src * *) t ON (t.dst = p.id and t.src > 0) JOIN currency c ON (c.id=t.currency) ...... ORDER BY p.name ![]() В твоем случае, скорее, для MYSQL можно использовать UNION |
Отправлено: 09:53, 18-06-2004 | #6 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать mar
ох... много раз у меня баз аданных умирала... но всетаки я написал... вот что уменя получилось: $LogList = mysql_query('SELECT l.Date, count(*) as Count, sum(l.ByteSent) as AllByteSent, sum(l.ByteSent) / '.$MaxByte['Max'].' as prb, count(*) / '.$MaxCount['Max'].' as prc, l2.C as C FROM logs as l LEFT JOIN ( SELECT l3.Date, count(*) as C FROM ( SELECT Date FROM logs GROUP BY Date, FromIp) as l3 GROUP BY l3.Date) as l2 ON l.Date = l2.Date WHERE l.Date >= "'.$StartDate.'" AND l.Date <= "'.$EndDate.'" GROUP BY l.Date, l2.Date '.$sort.';') or print mysql_error(); ![]() буду оптимизировать. Добавлено: в итоге было: $MaxByte = mysql_fetch_array(mysql_query('SELECT sum(ByteSent) as Max FROM logs WHERE Date >= "'.$StartDate.'" AND Date <= "'.$EndDate.'" GROUP BY Date ORDER BY Max DESC;')); $MaxCount = mysql_fetch_array(mysql_query('SELECT count(*) as Max FROM logs WHERE Date >= "'.$StartDate.'" AND Date <= "'.$EndDate.'" GROUP BY Date ORDER BY Max DESC;')); $LogList = mysql_query('SELECT l.Date, count(*) as Count, sum(l.ByteSent) as AllByteSent, sum(l.ByteSent) / '.$MaxByte['Max'].' as prb, count(*) / '.$MaxCount['Max'].' as prc, l2.C as C FROM logs as l LEFT JOIN ( SELECT l3.Date, count(*) as C FROM ( SELECT Date FROM logs GROUP BY Date, FromIp) as l3 GROUP BY l3.Date) as l2 ON l.Date = l2.Date WHERE l.Date >= "'.$StartDate.'" AND l.Date <= "'.$EndDate.'" GROUP BY l.Date, l2.Date '.$sort.';') or print mysql_error(); $LogList = mysql_query('SELECT l1.*, l1.Count / m.Max_Count as prc, l1.AllByteSent / m.Max_Byte as prb, l2.C FROM ( SELECT Date, count(*) as Count, sum(ByteSent) as AllByteSent FROM logs WHERE Date >= "'.$StartDate.'" AND Date <= "'.$EndDate.'" GROUP BY Date '.$sort.') as l1, ( SELECT l3.Date, count(*) as C FROM ( SELECT Date FROM logs GROUP BY Date, FromIp) as l3 GROUP BY l3.Date) as l2, ( SELECT MAX(m1.Max_Byte) as Max_Byte, MAX(m2.Max_Count) as Max_Count FROM ( SELECT Date, sum(ByteSent) as Max_Byte FROM logs GROUP BY Date ORDER BY Max_Byte DESC) as m1 LEFT JOIN ( SELECT Date, count(*) as Max_Count FROM logs WHERE Date >= "'.$StartDate.'" AND Date <= "'.$EndDate.'" GROUP BY Date ORDER BY Max_Count DESC) as m2 USING( Date )) as m WHERE l1.Date=l2.Date;') or print mysql_error(); |
------- Отправлено: 19:49, 18-06-2004 | #7 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать ![]() ![]() |
Отправлено: 21:45, 18-06-2004 | #8 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать к сожалению находятся люди которые утверждают что я ламммер в части баз данных
|
------- Отправлено: 22:13, 18-06-2004 | #9 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Это не так, можешь приезжать ко мне и я выдам тебе разрешение на плевок в левый глаз за клевету
![]() |
------- Отправлено: 00:04, 19-06-2004 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочее - [решено] поля tracert вывода | nmn | Сетевые технологии | 2 | 05-12-2008 17:36 | |
MSFT SQL Server - копирование поля с RTF документом | toro | Программирование и базы данных | 6 | 16-09-2008 00:54 | |
PHP и мемо-поля MS SQL | Zarenkova | Вебмастеру | 3 | 16-01-2008 02:57 | |
Размер поля Text | pauluss | Вебмастеру | 3 | 04-03-2004 22:54 | |
пароль для поля | Guest | Программирование и базы данных | 1 | 02-11-2003 12:00 |
|