2012-05-21 4 views
2

Я хочу, чтобы пользователи посещали мою страницу в течение 10 дней на графике. Мне нужно указать COUNT() все значения за последние десять дней.MySQL COUNT за сутки

Лучший макет будет

Day|COUNT(ip) 

1 - 10 
2 - 12 
3 - 52 
...... 

Я надеюсь, вы понимаете, что я имею в виду. Может ли MySQL сделать это напрямую или мне нужно сделать это на PHP в 10 отдельных запросах?

С уважением, Moritz

Обновление с Tablestructure:

Id (Auto Increment)|Time (Unix Timestamp)|Ip|Referer 
+4

Вы должны опубликовать структуру таблицы, некоторые выборочные данные и то, что вы пробовали. – Taryn

+1

В зависимости от вашей структуры, похоже, что вы просто ищете GROUP BY. – Corbin

+0

Не знаю, группа будет работать с отметкой unix за целый день – Moritz

ответ

1

попробовать это:

SELECT CAST(DATE(FROM_UNIXTIME(`Time`)) AS CHAR) as dateoftime, COUNT(Ip) as cnt 
FROM tablename 
WHERE DATE(FROM_UNIXTIME(`Time`)) > DATE_SUB(current_timestamp, INTERVAL 10 DAY) 
GROUP BY CAST(DATE(FROM_UNIXTIME(`Time`)) AS CHAR) 
+0

Эй, DATE_SUB (Indate, INTERVAL 10 DAY) Что такое indate? Здесь не существует модификатора. – Moritz

+0

Я отредактировал после публикации, обновил страницу, и вы увидите отредактированный ответ. Используйте current_timestamp вместо Indate –

2

Это даст вам результаты с фактическими значениями даты:

SELECT 
    COUNT(DISTINCT ip), 
    FROM_UNIXTIME(Time, '%m/%d/%Y') AS Day 
FROM 
    tbl 
WHERE 
    Time >= UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL -10 DAY)) 
GROUP BY 
    FROM_UNIXTIME(Time, '%m/%d/%Y') 
+0

Я бы предложил следующее предложение WHERE: Time> UNIX_TIMESTAMP (DATE_ADD (CURDATE(), INTERVAL -10 DAY)) – bobwienholt

+0

@bobwienholt: Не имеет значения. В любом случае это одно и то же. – Travesty3

+0

Не совсем. Ваш метод пропустит начало первого дня. – bobwienholt

2

Это должно работать быстро для вас

SELECT COUNT(ip) ipcount,dt FROM 
(
    SELECT ip,DATE(FROM_UNIXTIME(`Time`)) as dt FROM mytable 
    WHERE `Time` > TO_UNIXTIME(NOW() - INTERVAL 10 DAY) 
) A GROUP BY dt; 

Убедитесь, что индекс по Time

ALTER TABLE mytable ADD INDEX TimeIndex (`Time`); 
Смежные вопросы