php - cakephp - 按年、月使用分组

标签 php mysql sql cakephp

我有三张表、分行、 child 和发票—— child 有很多发票。分支机构有很多 child

我试图让用户查询数据库以获取给定分支机构中 child 的所有发票,而且用户可能已经输入了一个日期范围。无论哪种方式,我都想选择所有发票并将它们分组,以便每月轻松显示在表格中。即,用户想要 2013 年 1 月 -> 2014 年 1 月的所有发票。然后我显示所有发票,但将它们分组,以便所有 2013 年 1 月、2013 年 2 月等都在一起......每个月都会以某种方式很酷)

此刻我有:

$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 个月,所以我猜我的错误代码是每月只收到一张发票​​。

谁能告诉我怎样才能得到我想要的结果?

最佳答案

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

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

关于php - cakephp - 按年、月使用分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21008626/

相关文章:

mySQL LIKE 全文查询

php - 散列密码并将其和盐保存到 mysql pdo utf8 编码

mysql - 为什么我不能在我的 magento 安装脚本中设置 auto_increment 值?

sql - 如何有效地检查表是否为空?

php - 使用 WHERE IN 子句使用 MySQL 查询的问题

mysql - 在 mysql WorkBench 中从模式中的 CSV 导入表需要太长时间

php - 将字段从一个数据库复制到 MySQL 中的另一个数据库

php - 在两列中显示来自mysql的数据

javascript - 如何定义单独的本地和远程变量(PHPStorm、Webstorm)

php - 扩展类中的 PDO 查询