【发布时间】:2012-11-26 12:03:34
【问题描述】:
虽然我知道 find() 上的 group、contain、fields 和 order 选项,但我似乎无法使用 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
基本上,我正在尝试使用Influences 表上的COUNT() 函数检索具有Influences 1、2、3 和4 的Users 数组,然后按COUNT() DESC 对它们进行排序.
在 CakePHP 中是否有一种简洁的方法(我不想使用任何技巧或函数,如 Model::query())?
编辑: 实际上不是SUM(),而是COUNT(),尽管我没有对我的问题做出任何改变。 p>
【问题讨论】:
-
尝试在此处使用虚拟字段 - 使查询方式在之后更具可读性和可用性。
-
@mark 我想到了,但是怎么做呢?虚拟字段不是用于当前模型中的数据吗?我只需要这个特定功能中的
SUM()字段。如果我找到一种使用虚拟字段的方法,它不会使模型更重,而是每次我使用模型时都添加这个字段吗?
标签: cakephp count group-by has-and-belongs-to-many cakephp-2.2