Группировка

morti

Новичок
Группировка

Доброе время суток, дамы и господа. Вопрос такой. Есть таблица, в которой фиксируются посещения сайта.

data ip

Где

data - Дата посещения сайта
ip - ИП адрес посетителя

ip для одного дня могут дублироваться так как пользователь перемещается по сайту

нужно вывести одинм запросом

Дата1 | Количество уникальных посетителей на Дата 1
Дата2 | Количество уникальных посетителей на Дата 2
Дата3 | Количество уникальных посетителей на Дата 3

и т.д.

представляю себе так

SELECT DISTINCT ГОДМЕСДЕН, COUNT(DISTINCT ip) FROM таблица ORDER BY ГОДМЕСДЕН ASC;

В результате потом вывожу что получается

Сравниваю с вариантом в котором я делаю Цикл в пределах заданного диапазона дат

for(i=1;i<32;i++)
{
ПОЛУЧАЕМ УНИКАЛЬНОЕ КОЛИЧЕСТВО IP НА ДЕНЬ
}

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

morti

Новичок
Не ну это нето. Мне нужно сделать DISTINCT для даты, а для ипишников получить количество уникальных ипишников на дату.
 

Yaguan

пилот
Так пробовал?
[SQL]SELECT col_date, COUNT(ip) FROM tbl_name GROUP BY(col_date) ORDER BY col_date[/SQL]
 

morti

Новичок
Автор оригинала: Yaguan
Так пробовал?
[SQL]SELECT col_date, COUNT(ip) FROM tbl_name GROUP BY(col_date) ORDER BY col_date[/SQL]
Ну я где то так и делаю. Только фишка в том col_date может быть дофига одинаковых.

Вообщем сейчас запустил и проверил на сегодняшний месяц.

В случае одного запроса как я делаю выше, результат не полный, отваливаются не которые посещениея. А если делаю цикл к примеру из 21 дня, и в нем 21 запрос. То все в ажуре.

На титульной странице я вывожу Отчет по 15 сайтам на 6 дней. В итоге одна страница делает 90 запросов. А это много, по этому так делать не хочется.

---------

Пойду пошарюсь как UNION использовать. Но все таки мне кажется собака рылась не там.

---------

Вопрос закрыт. Как грится дело было не в бабине...

-~{}~ 21.01.06 15:11:

Запрос работал правильно. Просто когда все это дела распаковывал не учел что может быть что в определенный день не было посещений. А я это дело не проверил. В результате значения массива сдвинулись.
 

alpine

Новичок
morti
Так должно считать правильно:
[sql]
SELECT `col_date`, COUNT( DISTINCT `ip` ) as cnt
FROM `tbl_name`
GROUP BY `col_date`
[/sql]
Единственный недостаток, это если не было посещений за какой-то день, то он в запросе не выводится. Решается эта проблема подготовкой массива с датами в php и смерживанием с результатами выборки.
Если тебя интересует выборка еще по определенному интервалу то добавляешь условие WHERE.
 
Сверху