2014-10-23 2 views
0

У меня есть код, чтобы получить массив дат (в этом месяце - 12):mysql | подсчитать количество записей, сгруппированных по времени

for ($i = 0; $i <= 11; $i++) { 
    $months[] = date("Y-m", strtotime(date('Y-m-01')." -$i months")); 
} 

Чтобы получить записи из БД с помощью указанного месяца я могу использовать код ниже:

$sql = 'SELECT COUNT(id) FROM `#__records` WHERE MONTH(date)=1 AND YEAR(date)=2010'; 

Горячий, чтобы создать мой запрос на получение данных по месяцам? Спасибо!

ответ

1

Попробуйте

for ($i = 0; $i <= 11; $i++) { 
    $months[] = date("Y-m", strtotime(date('Y-m-01')." -$i months")); 
} 

$count = sizeof($months); 

for($i=0;$i<$count;$i++) 
{ 
    $sql = 'SELECT COUNT(id) AS id FROM `#__records` WHERE MONTH(date)='".$months[$i]."' AND YEAR(date)=2010'; 
    $result = mysql_query($sql); 
    if($result) 
{ 
$data_array = array(); 
    $data = mysql_fetch_assoc($result); 
    if($data) 
    { 
     $data_array[] = array($data['id']); 
    } 
} 
} 
print_r($data_array); 
0

Вы можете сделать это непосредственно в SQL с соответствующим запросом GROUP BY.

Трюк - это небольшое выражение. При любом DATE или DATETIME`, он дает первый день месяца.

DATE(DATE_FORMAT(datevalue, '%Y-%m-01')) 

В запросе используется эта формула для выяснения причин.

Попробуйте это:

SELECT COUNT(id) AS idcount, 
     DATE(DATE_FORMAT(date, '%Y-%m-01')) AS month_beginning 
    FROM table 
WHERE date >= DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) - INTERVAL 12 MONTH 
    AND date < DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) + INTERVAL 1 MONTH 
    GROUP BY DATE(DATE_FORMAT(date, '%Y-%m-01')) 
    ORDER BY DATE(DATE_FORMAT(date, '%Y-%m-01')) 

Это возвращает одну строку для каждого из последних двенадцати месяцев.

Вот более обширная запись по этому сводному запросу. http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

+0

Спасибо! Но это просто дайте мне одну строку ... – user889349

+0

Что вы получите, если попробуете 'SELECT id, DATE (DATE_FORMAT (дата, '% Y-% m-01')) FROM table'? Вы получаете правильную дату начала месяца? Кроме того, возможно, вы должны включить имя столбца 'date' в backticks, потому что это зарезервированное слово. –

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