我试图在日期范围内显示一些统计数据。在表格行中有许多ID,并尝试计算它自己的ID的总分钟数。
目前返回值如下:
{"id":"25","minute":13}
{"id":"17","minute":12}
{"id":"16","minute":10}
{"id":"17","minute":10}
{"id":"16","minute":4}
{"id":"34","minute":5}
{"id":"17","minute":21}
{"id":"30","minute":12}
{"id":"30","minute":13}
{"id":"30","minute":50}
控制器
public function actionStats() {
if (isset($_POST['begin'], $_POST['end'])) {
$begin = strtotime($_POST['begin']);
$end = strtotime($_POST['end']);
$Criteria = new CDbCriteria();
$Criteria->condition = "created >= $begin and created <= $end and status=1";
$transcripts = Transcripts::model()->findAll($Criteria);
foreach($transcripts as $transcript) {
$op = $transcript->opID;
$minute = $transcript->ended - $transcript->created;
echo json_encode(array("id" => $op, "minute" => floor($minute/60)));
}
}
}
答案 0 :(得分:0)
如何在MySQL查询中添加它?例如。使用SUM
函数:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
答案 1 :(得分:0)
我会将您的代码修改为:
public function actionStats()
{
if (isset($_POST['begin'], $_POST['end']))
{
$begin = strtotime($_POST['begin']);
$end = strtotime($_POST['end']);
$Criteria = new CDbCriteria();
$Criteria->condition = "created >= $begin and created <= $end and status=1";
$transcripts = Transcripts::model()->findAll($Criteria);
$transcriptTotals = array();
foreach($transcripts as $transcript)
{
$op = $transcript->opID;
$minute = $transcript->ended - $transcript->created;
if (array_key_exists($op, $transcriptTotals)) {
$transcriptTotals[$op] += floor($minute/60);
} else {
$transcriptTotals[$op] = floor($minute/60);
}
}
echo json_encode($transcriptTotals);
}
}
这应该会产生如下输出:
{'1':'2', 'id':'sumOfMinutes', etc}
如果您的JSON需要与上面指定的一样,那么您将拥有如下代码:
foreach ($transcriptTotals as $id=>$sum) {
echo json_encode(array('id'=>$id, 'minutes'=>$sum));
}