好的,我遇到了一个问题,希望你能协助解决。基本上,我想要完成的是计算过去十二个月的注册总数,从当前月开始。
首先,由于我无法保证每个月都有返回结果,所以我建立了一个数组并用我的查询结果填充它。我成功地提取了所有需要的数据,但是我在"排序"它们方面遇到了麻烦。
我希望能够按如下方式显示它:
当前是10月,所以月份将列如下:
2014年11月,2014年12月,2015年1月,2015年2月,2015年3月,...,2015年10月。
使用这个数组:
$months = array(
'1'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'2'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'3'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'4'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'5'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'6'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'7'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'8'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'9'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'10'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'11'=>array('TOTAL'=>0, 'YEAR'=>NULL),
'12'=>array('TOTAL'=>0, 'YEAR'=>NULL)
);
然后使用获取到的结果填充它:
key: 1 (January) total: 17 year: 2015
key: 2 (February) total: 20 year: 2015
key: 3 (March) total: 23 year: 2015
key: 4 (April) total: 29 year: 2015
key: 5 (May) total: 26 year: 2015
key: 6 (June) total: 26 year: 2015
key: 7 (July) total: 26 year: 2015
key: 8 (August) total: 24 year: 2015
key: 9 (September) total: 22 year: 2015
key: 10 (October) total: 24 year: 2015
key: 11 (November) total: 30 year: 2014
key: 12 (December) total: 42 year: 2014
这是查询/循环的代码:
$query = "SELECT MONTH(DATE_ADDED) as MONTH_NUMBER, MONTHNAME(DATE_ADDED) as MONTH_NAME, COUNT(*) as TOTAL_REGISTRATIONS, YEAR(DATE_ADDED) AS YEAR FROM MEMBERS WHERE DATE_ADDED >= (CURDATE() - INTERVAL (DAY(CURDATE()) - 1) DAY) - INTERVAL 11 MONTH GROUP BY MONTH(DATE_ADDED) ORDER BY DATE_ADDED ASC";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_assoc($result)){
$months[$row['MONTH_NUMBER']]['NAME'] = $row['MONTH_NAME'];
$months[$row['MONTH_NUMBER']]['TOTAL'] = $row['TOTAL_REGISTRATIONS'];
$months[$row['MONTH_NUMBER']]['YEAR'] = $row['YEAR'];
$months[$row['MONTH_NUMBER']]['MONTH_NUM'] = $row['MONTH_NUMBER'];
}
foreach($months as $key=>$data){
echo 'key: '.$key. ' ('.$data['NAME'].') total: '.$data['TOTAL'].' year: '.$data['YEAR'].'<br/>';
}
exit;
编辑:到目前为止,我已经能够完成以下操作:
key: 12 (December) total: 42 year: 2014
key: 11 (November) total: 30 year: 2014
key: 10 (October) total: 24 year: 2015
key: 9 (September) total: 22 year: 2015
key: 8 (August) total: 24 year: 2015
key: 7 (July) total: 26 year: 2015
key: 6 (June) total: 26 year: 2015
key: 5 (May) total: 26 year: 2015
key: 4 (April) total: 29 year: 2015
key: 3 (March) total: 23 year: 2015
key: 2 (February) total: 20 year: 2015
key: 1 (January) total: 17 year: 2015
使用以下代码:
function sortArray(array $a, array $b) {
if($a['YEAR'] <= $b['YEAR'] && $a['MONTH_NUM'] < $b['MONTH_NUM']){
return 1;
}elseif($a['YEAR'] <= $b['YEAR'] && $a['MONTH_NUM'] > $b['MONTH_NUM']){
return -1;
}elseif($a['YEAR'] >= $b['YEAR'] && $a['MONTH_NUM'] > $b['MONTH_NUM']){
return -1;
}elseif($a['YEAR'] >= $b['YEAR'] && $a['MONTH_NUM'] < $b['MONTH_NUM']){
return 1;
} else {
return 0;
}
}
// Sort
uasort($months, 'sortArray');
编辑:您可以看到它按年份正确排序,但将月份列出的顺序是错误的。
编辑:期望输出
key: 11 (November) total: 00 year: 2014
key: 12 (December) total: 00 year: 2014
key: 1 (January) total: 00 year: 2015
key: 2 (February) total: 00 year: 2015
key: 3 (March) total: 00 year: 2015
key: 4 (April) total: 00 year: 2015
key: 5 (May) total: 00 year: 2015
key: 6 (June) total: 00 year: 2015
key: 7 (July) total: 00 year: 2015
key: 8 (August) total: 00 year: 2015
key: 9 (September) total: 00 year: 2015
key: 10 (October) total: 00 year: 2015
最终,我将通过柱状图展示过去一年每月的总数。
不确定这是否是最佳方法,欢迎提出建议。
mysql_
函数,它们已被弃用,请改用mysqli_
函数或PDO
对象。 - al'ein$a
是一个数组元素,$b
是要与$a
进行比较的下一个数组元素。比较方法由您决定。返回负数,元素$a
将下降。返回正数,它将上升。如果为零,则保持其位置不变。 - al'ein