例如我有表 - Orders1,Orders2,Orders3,Users。
我需要为每个用户制作月度和季度报告。例如,我在Orders1模型quartal_sum_by_users($users, $quarter)
中创建了一个函数。然后我做了这样的事情:
$cost = 0;
foreach($users as $user) {
while($month <= 3) { // first three months
$orders = $this->Order1->find('all', array(
'recursive' => -1,
'fields' => array('DISTINCT id', 'COALESCE(cost+work_cost+work_installation_cost, 0) AS amount'),
'conditions' => array(
'MONTH(date_ordered)' => $month,
'YEAR(date_ordered)' => $year,
'current_status' => 3
)
));
foreach($orders as $order) {
$cost[$month] += $order[0]['amount'];
}
$month++;
} // WHILE
} // FOREACH
所以,这是工作但非常缓慢(我正在迁移系统正在处理普通的PHP和SQL查询并且运行良好)并且我有400多个用户,每个Order表超过1000个。
以CakePHP风格实现这一目标的最佳方式是什么?
答案 0 :(得分:1)
解决方案应该作为答案,而不是评论。否则,这个问题将被永久标记为未答复。
无论如何......这就是你需要做的分组:
$this->Order1->find('all', array(
'recursive' => -1,
'fields' => 'YOUR_FIELDS',
'conditions' => 'YOUR_CONDITIONS',
'group' => 'THE_FIELD_YOU_WANT_TO_USE_AS_GROUP'
));
选项组接受一个数组,因此您可以按多个字段进行分组。