Как выбрать уникальных посетителей за интервал дат? - PullRequest
1 голос
/ 30 июня 2011

Я нашел несколько строк запроса, связанных с тем, что я ищу, но ничего, что делает это.По сути, у меня есть график, который должен отображать уникальных посетителей за интервал времени (час, день, месяц или год).Итак, график похож на Google Analytics или это график Analytics .В таблице есть столбец идентификатора посетителя и столбец отметки времени (в стиле 0000-00-00 00:00:00).Мне нужно иметь возможность выбирать уникальных или общих посетителей за интервал (например, 32 посетителя 5-го, 30-го 6-го и т. Д.).

Наверное, мой вопрос заключается в том, есть ли способ сделать это эффективнотолько с запросом?Или мне нужно будет использовать PHP для получения всех данных (проблема в том, что мне придется делать запрос для каждой точки на графике, неэффективно)?

Ответы [ 3 ]

1 голос
/ 30 июня 2011

Вам нужно будет агрегировать ваши данные. Попробуйте этот запрос:

SELECT DATE(data_timestamp), COUNT(visitor_id)
FROM analytics_table
WHERE DATE(data_timestamp) BETWEEN '2011-05-01' AND '2011-05-31'
GROUP BY 1

Вот как вы заполняете свои ежемесячные данные ( ПРЕДУПРЕЖДЕНИЕ: НЕПРОВЕРЕНО! ):

<?php
$sql = "SELECT DATE(data_timestamp), COUNT(visitor_id)
FROM analytics_table
WHERE DATE(data_timestamp) BETWEEN '2011-05-01' AND '2011-05-31'
GROUP BY 1";

$rs = mysql_query($rs);
$date1 = $datex = '2011-05-01';
$date2 = '2011-05-31';

$arrayData = $tmpArray = array();

while( $r = mysql_fetch_array($rs) )
{
   $tmpArray[$r['date']] = $r['count'];
}

while( $datex <= $date2)
{
   if( isset($tmpArray[$datex]) )
   {
      $arrayData[$datex] = $tmpArray[$datex];
   }
   else
   {
      $arrayData[$datex] = 0;
   }
   list( $y, $m, $d) = explode('-', $datex);
   $datex = date('Y-m-d', mktime(0, 0, 0, $m, $d, $y));
}


?>

этот запрос использовать:

  • ДАТА () для получения даты из ваших данных и
  • COUNT () для подсчета итоговых данных за эту конкретную дату.
  • и GROUP BY, чтобы сгруппировать ваши данные в зависимости от того, какое поле вы выбрали.
0 голосов
/ 30 июня 2011

GROUP BY не возвращает значение 0, если в один прекрасный день нет посетителя. Это приведет к дырам в непрерывности времени. Есть два способа:

1) Группа, как сказали другие, а затем найти дыры

2) Создайте таблицу агрегации с полями «дата», «количество» и т. Д. И вставляйте туда данные каждый день по cron.

0 голосов
/ 30 июня 2011

По сути, вы можете преобразовать DATETIME / TIMESTAMP в даты и время отдельно, а затем использовать GROUP BY для получения необходимых результатов.

MySQL / SQL: Группировать по дате толькостолбец Datetime

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