Вывод уникальных посетителей за сегодня

Ms

Новичок
Вывод уникальных посетителей за сегодня

Есть таблица, в которой я храню статистику

PHP:
CREATE TABLE `stat` (
  `id` mediumint NOT NULL auto_increment,
  `ip` text ,
  `all_user_info` text,
  `date_time` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
)
Мне надо вывести на экран количество уникальных пользователей (т.е. с разным ip), посетивших мой сайт за сегодня.
Не могу составить такой запрос.

Приходит на ум:
PHP:
SELECT COUNT(DISTINCT(`ip`)) FROM `stat` WHERE `date_time` = CURDATE();
Но не работает почему-то. Интуитивно понятно, что надо каким-либо образом задейстовать 3 функции: COUNT(), DISTINCT(`ip`) и CURDATE(). Однако каким образом это можно сделать -- не знаю.
 

chira

Новичок
для начала замечания по структуре:
1. `id` mediumint - ты ожидаешь всего 8 милионов посетителей?
2. `ip` text - почему тип text? в этом поле может быть другая инфа?
я бы сделал UNSIGNED INT и использовал PHP функцию ip2long для представления IP в виде числа.
3. сделай дополнительное поле с типом DATE или измени тип у date_time, добавь индекс

тогда твой селект заработает ...
SELECT COUNT(DISTINCT `ip`) as ip
FROM `stat`
WHERE `date_time` = CURDATE()

и совет: не держи все данные статистики, раз в сутки делай подсчёт посещений и данные сохраняй в суммарной таблице, устаревшие данные удаляй ...
 

Ms

Новичок
3. сделай дополнительное поле с типом DATE или измени тип у date_time, добавь индекс
в date_time я хочу хранить как дату, так и время захода.
При этом условии
PHP:
SELECT COUNT(DISTINCT `ip`) as ip
FROM `stat` 
WHERE `date_time` = CURDATE()
Возвращает ноль.
 

chira

Новичок
в date_time я хочу хранить как дату, так и время захода.
тогда
...
WHERE `date_time` BETWEEN '2006-06-19 00:00:00' AND '2006-06-19 23:59:59'
или
WHERE `date_time` BETWEEN CONCAT(CURDATE(),' 00:00:00') AND CONCAT(CURDATE(),' 23:59:59')
 

chira

Новичок
rotoZOOM

прокатит, если нужно запретить использование индекса
 
Сверху