2013-09-29 2 views
-1

В поле времени есть такие записи, как 2013-09-02 07:54:28, и я хочу получить сумму каждого дня. в pseudoscript он будет работать так:Как получить количество каждого дня в массиве

  1. Удалять часов
  2. дату поиска в массиве, если не существует дата записи
  3. добавить количество +1 к настоящему времени в массиве
  4. перейти к следующему результату

запись, как указано выше, с номером в массиве, я получаю через это:

$q1 = mysql_query("SELECT time FROM stats WHERE seite = '2'"); 
while ($row = mysql_fetch_array($q1, MYSQL_ASSOC)) { 
    $all[] = $row["time"]; 
} 
print_r($all); 
+0

print_r Результаты: Array ([0] => 0000-00-00 00:00:00 [3] => 0000-00-00 00:00:00 [4] = > 0000-00-00 00:00:00 ... [19] => 2013-07-15 23:04:18 [20] => 2013-07-15 23:05:22 ... –

+0

Почему не просто сделайте это в запросе с помощью команды «GROUP BY»? – Barmar

+0

@Barmar: может быть, он делает что-то еще в цикле. Если нет, тогда «GROUP BY» - это способ пойти. –

ответ

0

Если вы делаете какую-либо другая логику в цикле:

$all = array(); 
$q1 = mysql_query("SELECT time, DATE(time) AS timeDate FROM stats WHERE seite = '2'"); 
while ($row = mysql_fetch_array($q1, MYSQL_ASSOC)) { 
    if (!isset($all[$row['timeDate']])) { 
     $all[$row['timeDate']] = 0; 
    } 
    $all[$row['timeDate']]++; 
    // other logic 
} 
print_r($all); 

Или, если это вся логика, просто вычислить то же даты:

$all = array(); 
$q1 = mysql_query("SELECT DATE(time) AS timeDate, COUNT(time) timeCount FROM stats WHERE seite = '2' GROUP BY DATE(time)"); 
while ($row = mysql_fetch_array($q1, MYSQL_ASSOC)) { 
    $all[$row['timeDate']] = $row['timeCount']; 
} 
print_r($all); 
+0

спасибо, но это приводит к: Неустранимая ошибка : Не могу использовать возвращаемое значение метода в контексте записи ... –

+0

Я изменил код, поэтому SQL уже возвращает форматированную дату (нет необходимости форматировать дату в php). –

0

Вы можете найти сумму от SQL запроса без обработки по php.

SELECT DATE_FORMAT(time, '%Y-%m-%d') AS day, COUNT(*) AS amount FROM stats WHERE seite = '2' GROUP BY day; 
0

SELECT date(time), count(time) FROM stats WHERE seite = '2' group by date(time)

Смежные вопросы