CakePHP 分组和计数

Posted

技术标签:

【中文标题】CakePHP 分组和计数【英文标题】:CakePHP group and count 【发布时间】:2018-11-15 07:42:57 【问题描述】:

我无法弄清楚这一点。

我有以下 3 个表:-

交易表

身份证 日期 列表项

产品表

ID

姓名

价格

Products_Transactions 表

Transaction_ID

产品 ID

数量

所以关系如下 - 进行交易,然后 products_transactions 表将它们连接在一起,因为一个交易可以有多个产品,一个产品可以有多个交易。 join_table 还跟踪已售出的数量,例如,某份报纸在交易 #1 中售出,数量为 2(即售出 2 份报纸)。

现在,我想创建一个 mysql 语句来查找在特定日期间隔内售出的所有产品,所以我得到如下信息:-

3 x 报纸 12 x 苏打水 15 x 啤酒

所以,它只是计算和总结所有销售的产品。

我已经认真尝试了所有方法 - 我正在使用 Cakephp,因此提供的解决方案会有所帮助,但即使只是实现此目的的普通 SQL 也可能对我有所帮助。

到目前为止,这就是我所拥有的:-

$productTransactionsTable = TableRegistry::get('products_transactions');
    $productsTransactions = $productTransactionsTable->find('all');
    $productsTransactions->matching('transactions', function ($q) 
        return $q->where([
            'transaction_date >=' => new \DateTime('-1 week'),
            'transaction_date <=' => new \DateTime('now'),
            'device_id IN' => $this->deviceIdsInDepartment(2)
        ]);
    );
    $productsTransactions->contain(['products']);

    $productsTransactions->select([
        'count' => $productsTransactions->func()->count('quantity'),
        'name' => 'products.name'
    ]);

    $productsTransactions->groupBy('products.id');

但这只会给出 1 个单一的结果,将所有内容一起计算为 1 行,如下所示:

/src/Controller/EconomyController.php (line 665)

[ (int) 0 => 对象(Cake\ORM\Entity)

    'count' => (int) 4504,
    'name' => 'D Morgenbrød',
    '[new]' => false,
    '[accessible]' => [
        '*' => true
    ],
    '[dirty]' => [],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'products_transactions'


]

任何帮助表示赞赏!我严重卡在这里!

谢谢!

【问题讨论】:

【参考方案1】:

我认为您正在计算销售数量和分组的总数,因此您获得了高于结果的结果。我认为,您需要尝试以下方法:

$data = $query
    ->select([
      'name' => 'products.name',
      'quantity' => 'products.quantity',
    ])
    ->group('products.id');

【讨论】:

是的,问题是我使用 groupBy 而不是 group -.-' 如何知道分组记录的数量? @rahim.nagori 您可以在选择本身中使用 count 。 $query->select([ 'name, 'AssignedCount' => $q->func()->count($this->aliasField('name')) ] )->group('products.id'); 感谢您的回复,我已经得到了这个,但现在的问题是我必须在 cakePhp 中用我的分页返回这个计数。有什么想法吗? @rahim.nagori 您是否在控制器中设置此值?如果是,调试工具包的“变量”选项卡中是否没有该值?如果没有,您介意发布您的代码 sn-p。

以上是关于CakePHP 分组和计数的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 中的多重计数

如何删除或更改postgresql上的cakephp分页计数查询?

CakePHP 2.1 中的 Facebook 点赞对话列表(与分组最大值、子查询、加入相关)

CakePHP 2.9 连接查询返回错误结果

markdown [cakephp:CakePHP3注意事项] CakePHP3基本知识说明。 #cakephp

Cakephp - saveAll 和 beforeSave