У меня есть код, чтобы получить массив дат (в этом месяце — 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';
Горячий, чтобы создать мой запрос на получение данных каждый месяц?
Спасибо!
Попробуй это
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);
Вы можете сделать это непосредственно в 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/