当使用与另一个表连接的CDbWriter时,我遇到了主键的默认选择问题
我有两张桌子:
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。
感谢您的帮助
我认为小组必须在这个:
$criteria->with=array('category' => array('alias' => 'c', 'select' => 'c.name, COUNT(c.id) AS quantity', 'group' => 'c.name'));