Показать количество посещений за последние 24 часа, с разбивкой по часам - PullRequest
3 голосов
/ 02 августа 2009

Я храню метку времени в таблице mysql каждый раз, когда кто-то посещает сайт в первый раз.

Я получаю данные, которые выглядят так:

2009-08-02 04:08:27
2009-08-02 04:07:47
2009-08-02 05:58:13
2009-08-02 06:28:23
2009-08-02 06:34:22
2009-08-02 08:23:21
2009-08-02 09:38:56

Что я хочу сделать с этими данными, так это создать количество посещений, приходящихся на каждый час. Таким образом, в приведенном выше примере я пришел бы к 4-му часу с двумя посещениями, 5-й час = 1, 6-й час 2, 8-й час 1 и т. Д.

Я подумал, что лучший способ сделать это - сделать утверждение for следующим образом:

// a 24 hour loop
for($i = 24; $i > -1; $i--) {

    // the query for each hour
    $sql = 'SELECT * FROM visits WHERE (DATE(added) = DATE_SUB(CURRENT_DATE(), INTERVAL ' . $i . ' HOUR))'

$res = mysql_query($sql);
$count = mysql_num_rows($res);  


    // store the number of rows for this loop in the array
    $visits[] = $count;
}

Это кажется мне логичным ... но по какой-то причине ... определенно не работает.

Как бы вы это сделали?

Ответы [ 2 ]

6 голосов
/ 02 августа 2009

Как насчет:

SELECT hour(added), count(*) 
FROM visits 
WHERE added >= CURRENT_DATE()-1
GROUP BY hour(added)

Час (время) : «Возвращает час для времени. Диапазон возвращаемого значения от 0 до 23 для значений времени дня»,

2 голосов
/ 02 августа 2009

что делать в одном запросе, используя предложение group by?

Что-то вроде этого, вероятно, подойдет:

select HOUR(added), count(*) as nbr
from visits
where added between '2009-07-14' and '2009-07-15'
group by HOUR(added)
order by HOUR(added)

(конечно, вам может понадобиться адаптировать некоторые вещи, например даты)

Это заставит ваш сервер БД работать больше для этого запроса, чем для других, предложенных вами ... Но только один запрос, а не 24 - что хорошо.
С другой стороны, у вас будет меньше данных, идущих с сервера БД на сервер PHP; что здорово, особенно если стол большой!

Затем, на стороне PHP, вам нужно будет "восстановить" полную дату, так как этот запрос даст вам только часы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...