我有一个代码来获取日期数组(本月 - 12):
for ($i = 0; $i <= 11; $i++) {
$months[] = date("Y-m", strtotime( date( 'Y-m-01' )." -$i months"));
}
要在指定月份从DB获取记录,我可以使用以下代码:
$sql = 'SELECT COUNT(id) FROM `#__records` WHERE MONTH(date)=1 AND YEAR(date)=2010';
热门创建我每个月获取数据的请求? 谢谢!
答案 0 :(得分: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);
答案 1 :(得分:0)
您可以使用适当的GROUP BY
查询直接在SQL中执行此操作。
诀窍是这个小小的表达。给定任何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/