当使用CDbCriteria与另一个表连接时,我遇到了默认选择主键的问题 我有2张桌子:
Content (
id int2 pk,
title varchar,
content varchar,
categoryid int2 fk
)
Category (
id int2 pk,
name varchar,
...
)
我想在类别中选择name
和count(id)
(别的),并按名称对其进行分组以获取类别的数量。但是当我尝试以下操作时,由于选择了主键,我会收到错误。
$criteria=new CDbCriteria();
$criteria->with=array('category' => array('alias' => 'c', 'select' => 'c.name, COUNT(c.id) AS quantity'));
$criteria->select=array();
$criteria->group='c.name';
$result=Content::model()->findAll($criteria);
它给我以下错误:
[Err] ERROR: column "t.id" must appear in the GROUP BY clause or be used in an aggregate function
我现在想到的问题的解决方案是从条件中获取生成的SQL并将其替换为空字符串(我找不到获取SQL的方法)或更改框架代码(这看起来要复杂得多) 。
我的数据库管理器是PostgreSQL
附:将ID添加到分组并没有帮助到处的数量变成1.
感谢任何帮助。
答案 0 :(得分:0)
我认为小组必须在此:
$criteria->with=array('category' => array('alias' => 'c', 'select' => 'c.name, COUNT(c.id) AS quantity', 'group' => 'c.name'));