Cakephp 2.x 在同一字段上查找同时具有 DISTINCT 和 COUNT 的查询
Posted
技术标签:
【中文标题】Cakephp 2.x 在同一字段上查找同时具有 DISTINCT 和 COUNT 的查询【英文标题】:Cakephp 2.x find query having DISTINCT and COUNT together on same field 【发布时间】:2016-12-31 21:55:34 【问题描述】:User
表结构。
+------+-------+
| id | data |
+------+-------+
| 1 | a |
+------+-------+
| 1 | b |
+------+-------+
| 2 | c |
+------+-------+
想要的结果。
+------+-------+
| id | count |
+------+-------+
| 1 | 2 |
+------+-------+
| 2 | 1 |
+------+-------+
我以多种方式尝试了 DISTINCT 和 COUNT,但仍然没有得到想要的结果。
我在尝试什么
$this->User->find('all',array(
'conditions'=> array(),
'fields' => array(
'DISTINCT(User.id)',
'COUNT(DISTINCT User.id) as count'
)
)
);
【问题讨论】:
【参考方案1】:试试 group by 子句
$this->User->find('all',
array(
'fields' => array(
'User.id',
'COUNT(User.id) as count'
),
'group' => 'User.id'
)
);
【讨论】:
非常感谢。唯一的问题是,它在另一个数组中给出了计数。我试图将count
更改为 User.count
但没有运气。【参考方案2】:
除了比尔的answer,要获得count
作为User
字段,您需要将其作为virtualField
获得
$this->User->virtualFields['count'] = 0;
$this->User->find('all', [
'fields' => array(
'User.id',
'COUNT(User.id) as User__count'
),
'group' => 'User.id'
]);
这将是您示例的结果:
########## DEBUG ##########
array(
(int) 0 => array(
'User' => array(
'id' => '1',
'count' => '2'
)
),
(int) 1 => array(
'User' => array(
'id' => '2',
'count' => '1'
)
)
)
###########################
【讨论】:
以上是关于Cakephp 2.x 在同一字段上查找同时具有 DISTINCT 和 COUNT 的查询的主要内容,如果未能解决你的问题,请参考以下文章