Список хитов в час из таблицы MySQL - PullRequest
3 голосов
/ 21 апреля 2010

Я пытаюсь определить количество попаданий в час из базы данных. Данные в основном хранятся следующим образом:

Table Name: Visitors
============================
VisitorIP          TIMESTAMP
----------------------------
15.215.65.65       123456789

Я хочу отображать общее количество попаданий в час (за последние 6 часов), включая часы без совпадений. Пример вывода:

// Assuming now : 21:00
21:00 - 0 hits
20:00 - 1 hits
19:00 - 4 hits
18:00 - 0 hits
17:00 - 2 hits
16:00 - 3 hits

Я хотел бы получить данные в виде массива. Обратите внимание, что сохраненная дата имеет формат отметки времени UNIX. и может быть несколько часов без ударов!

Спасибо

Ответы [ 3 ]

4 голосов
/ 21 апреля 2010
SELECT MONTH(timestamp),DAY(timestamp), HOUR(timestamp),count(*) 
 from visitors
  group by MONTH(timestamp), DAY(timestamp), HOUR(timestamp)

В php вам нужно будет учесть любые дыры в данных за отсутствующие часы.

3 голосов
/ 21 апреля 2010

Вы можете использовать для этого простое ключевое слово МЕЖДУ. Вы можете описать дату и время между значениями, которые вы хотите выбрать (диапазон 3600 секунд).

SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*1 AND UNIX_TIMESTAMP()-3600*0;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*2 AND UNIX_TIMESTAMP()-3600*1;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*3 AND UNIX_TIMESTAMP()-3600*2;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*4 AND UNIX_TIMESTAMP()-3600*3;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*5 AND UNIX_TIMESTAMP()-3600*4;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*6 AND UNIX_TIMESTAMP()-3600*5;
0 голосов
/ 21 апреля 2010

только что упрощенный ответ выше,

for($i=1;$i<=6;$i++){
  $s -= $i;    
  $query[$i] = "SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*$i AND UNIX_TIMESTAMP()-3600*$s";
}

$i = 1;
foreach($query as $value){
  $result[$i] = mysql_fetch_row($query[$i]);
  $i++;
}

просто моя простая идея. не стесняйтесь использовать.

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