mysql | количество записей, сгруппированных по времени

У меня есть код, чтобы получить массив дат (в этом месяце — 12):

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';

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

0

Решение

Попробуй это

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);
1

Другие решения

Вы можете сделать это непосредственно в 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