cakephp - 按年,月使用组

时间:2014-01-08 23:16:41

标签: php mysql sql cakephp

我有三张桌子,分店,儿童和发票 - 孩子们有很多发票。分支机构有很多孩子

我正在尝试允许用户查询数据库以获取给定分支中的子项的所有发票,用户也可能已输入日期范围。无论哪种方式,我想选择所有发票并将它们分组,以便它们很容易在每月的表格中显示。即,用户想要2013年1月的所有发票 - >然后我显示了所有的发票,但是分组所以所有的jan2013都在一起,feb2013等......(另外,如果有一个很容易得到每个月的发票的总和,那将是很酷的)

我有的时候:

$conditions['Child.branch_id'] = $branch_id;
if($from != '') $conditions['Invoice.created >='] = $from;
if($to != '') $conditions['Invoice.created <='] = $to;
$fields = array('Invoice.*', 'Child.*', 'YEAR(Invoice.created) as year', 'MONTH(Invoice.created) as month');
$group = array('YEAR(Invoice.created)', 'MONTH(Invoice.created)');
$order = array('Invoice.created');
$kidsInvoices = $this->Invoice->find('all', array(  'conditions'=>$conditions,
                                            'fields'=>$fields,
                                            'group'=>$group,
                                            'order'=>$order));

但它只返回2条记录,当它应该返回所有5条记录时。我注意到我的5张发票中只有2个月,所以我猜我的错误代码只是每月收到一张发票​​。< / p>

有谁能告诉我如何才能得到我想要的结果?

1 个答案:

答案 0 :(得分:1)

如果我理解你想要正确做什么,那么你正在寻找订单,而不是团体。分组依据将使每个给定列的所有行具有相同的结果,压缩到一行,从而导致您在结果中看到的行数减少。

 $order = array('year', 'month');
 $kidsInvoices = $this->Invoice->find('all', array(  'conditions'=>$conditions,
                                        'fields'=>$fields,
                                        'order'=>$order));
相关问题