gpt4 book ai didi

在 HATBM 表上使用 WHERE 和 COUNT 的 CakePHP GROUP BY

转载 作者:行者123 更新时间:2023-12-01 10:03:19 25 4
gpt4 key购买 nike

尽管我知道 group , contain , fieldsorder find() 上的选项,我似乎无法使用 CakePHP 2.2.3 进行以下查询:

SELECT `User`.*, SUM(`Influence`.`id`) AS matches
FROM `db`.`users` AS `User`
LEFT JOIN `db`.`influences_users` AS `InfluencesUser` ON (`User`.`id` = `InfluencesUser`.`user_id`)
LEFT JOIN `db`.`influences` AS `Influence` ON (`InfluencesUser`.`influence_id` = `Influence`.`id`)
WHERE 1 = 1
AND `Influence`.`id` IN (1, 2, 3, 4)
GROUP BY `User`.`id`
ORDER BY COUNT(`Influence`.`id`) DESC

基本上,我正在尝试检索 Users 的数组拥有 Influences 1、2、3 和 4,带有 COUNT() Influences 上的函数表,然后按 COUNT() DESC 排序.

在 CakePHP 中是否有一种干净的方法(我不想使用任何 hack 或类似 Model::query() 的函数)来做到这一点?


编辑: 它实际上不是 SUM()而是一个COUNT()尽管我没有改变我的问题。

最佳答案

您可以只为下一个查询使用动态添加虚拟字段

$this->virtualFields['matches'] = 'SUM(Influence.id)';

然后您可以直接在结果数组中使用它:

echo $user['User']['matches']; // if you query on the User model that is

您也可以在您的订单/条件等方面使用它:

'order' => array('User__matches' => 'DESC')

不过,您需要处理模型,该模型将所有其他模型都视为“属于”!所以使用“InfluencesUser”并包含“Influence”和“User”

所以在你的情况下:

$this->User->InfluencesUser->virtualFields['matches'] = 'SUM(Influence.id)';
...
$results = $this->User->InfluencesUser->find(...)

echo $result['InfluencesUser']['matches']; //in the view

'order' => array('InfluencesUser__matches' => 'DESC')

关于在 HATBM 表上使用 WHERE 和 COUNT 的 CakePHP GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com