我的Page模型上有以下虚拟字段
function __construct($id = false, $table = null, $ds = null) {
$this->virtualFields['fans'] = 'SELECT COUNT(Favorite.id) FROM favorites AS Favorite WHERE Favorite.page_id = Page.id AND Favorite.status = 0';
parent::__construct($id, $table, $ds);
}
这将按预期工作,并显示将页面添加到收藏夹的用户数。问题在于,在开发过程中,某些行具有重复的user_id与page_id对,因此它返回错误的数字或唯一的用户。我试图像这样添加一个group by子句
$this->virtualFields['fans'] = 'SELECT COUNT(Favorite.id) FROM favorites AS Favorite WHERE Favorite.page_id = Page.id AND Favorite.status = 0 GROUP BY Favorite.user_id';
但这行不通。我尝试调试问题,但收到错误消息“允许的内存大小用尽”。我也尝试使用
SELECT COUNT('Favorite.user_id')
和SELECT DISTINCT('Favorite.user_id')
都不起作用。我相信DISTINCT离答案还很远,因为那会返回一个数组(我相信吗?)这是CakePHP的已知问题吗?我是在错误地实施小组吗?除了找到之后,还有其他解决方案吗?
最佳答案
尝试这个
SELECT COUNT(DISTINCT Favorite.user_id)
像那样 :
$this->virtualFields['fans'] = 'SELECT COUNT(DISTINCT id) FROM favorites WHERE status = 0';
关于mysql - CakePHP在虚拟字段中使用“分组依据”无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17108880/