CakePHP 3:如何在一次查询中统计和检索不同时期的数据?

Posted

技术标签:

【中文标题】CakePHP 3:如何在一次查询中统计和检索不同时期的数据?【英文标题】:CakePHP 3: How to count and retrieve data for different periods in one query? 【发布时间】:2017-10-26 07:30:38 【问题描述】:

我想按DATETIME created字段统计和检索不同时期的数据,例如今天、总计、本周等。

例如 this_week 如何计算?

这里是起始代码:

public function findTotalRegistered(Query $query, Array $options)
  
    $total = $query->func()->count('id');

    $query
      ->select([
        'total' => $total,
        //'today' => $today,
        //'this_week' => $this_week,
        //'this_month' => $this_month,
        //'this_year' => $this_year
      ]);

    return $query;
  

【问题讨论】:

【参考方案1】:

您可以通过执行子查询来实现:

public function findTotalRegistered(Query $query, Array $options)

    $total = $query->func()->count('id');

    $query
        ->select([
            'total' => $total,
            'today' => $query->where('DATE(created) = CURDATE()')->count(),
            'this_week' => $query->where('YEARWEEK(DATE(created), 1) = YEARWEEK(CURDATE(), 1))')->count(),
            'this_month' => $query->where('DATE_SUB(NOW(), INTERVAL 1 MONTH)')->count(),
            'this_year' => $query->where('YEAR(created) = YEAR(CURDATE())')->count()
        ])
        ->group(created);

    return $query;

谢谢

【讨论】:

您可能需要将其更改为自定义查询。

以上是关于CakePHP 3:如何在一次查询中统计和检索不同时期的数据?的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp 3 - 如何在验证过程中检索“表”类中的当前登录用户?

CakePHP:如何使用内部联接从两个表中检索数据?

如何在cakephp 3中获取数据表搜索键?

CakePHP 3“包含”不检索“属于”

CakePHP 3 的关联限制不起作用

Cakephp 3.x 保存 hasmany 关联