0

日付範囲を指定していくつかの統計を表示しようとしています。表の行には多くの 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)));
        }
    }       
}
4

2 に答える 2

0

すでにMySQLクエリに追加するのはどうですか? たとえば、次のSUM関数を使用します。

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

于 2012-07-16T20:48:43.073 に答える
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));
}
于 2012-07-16T20:49:26.483 に答える