2

次のようなテーブルが 1 つあります。

id | date       | customer_id | env_id | jobs
1  | 2012-11-20 | 200         | 100    | 10
2  | 2012-11-20 | 200         | 101    | 15
3  | 2012-11-20 | 200         | 102    | 12
4  | 2012-11-21 | 200         | 100    | 10
5  | 2012-11-21 | 200         | 101    | 12
6  | 2012-11-21 | 200         | 102    | 20

私が求めているのは、日付ごとにグループ化された結果です。

$usage = $this->Environment->DailyCount->find('all',
array(
'conditions' =>array('DailyCount.customer_id' => $user['customer_id']),
'group' => array('DailyCount.date'),
'recursive'=>-1));

しかし、それは1行しか返していません。3つすべてが必要です!

結果:

Array
(
    [0] => Array
        (
            [DailyCount] => Array
                (
                    [id] => 1
                    [date] => 2012-11-20
                    [customer_id] => 200
                    [env_id] => 100
                    [jobs] => 10
                )
       )

    [1] => Array
        (
            [DailyCount] => Array
                (
                    [id] => 4
                    [date] => 2012-11-21
                    [customer_id] => 200
                    [env_id] => 100
                    [jobs] => 10
                )

        )
)

結果の各日付の 3 つの行すべての後です - 3 つすべての env_id ジョブ カウントが必要です。

CakePHP でこれを行う方法や、MySQL でそのような結果を得る方法さえあれば、ケーキの方法を理解することができます。

----------- ハックソリューション ------------

自分の質問に答えられないので、質問を編集します

完璧な解決策ではありませんが、私にとってはうまくいき、迅速な解決策でした:

$dailyCount = $this->Environment->DailyCount->find('all',
array(
'conditions' => array('DailyCount.customer_id' => $user['customer_id']),
'order' => array('DailyCount.date DESC'),
'limit' => $limit,
'recursive'=>-1));

$usage = array();
foreach($dailyCount as $dc){
    $usage[$dc['DailyCount']['date']][] = $dc;
}
4

1 に答える 1

0

MySQL のGROUP_CONCAT()を使用できます。グループ化する場合は、おそらくそれが最善の策です。

于 2012-11-22T15:04:19.790 に答える