CakePHP在虚拟字段中使用“分组依据”不起作用

时间:2013-06-14 12:51:28

标签: mysql cakephp group-by cakephp-2.2

我的网页模型上有以下虚拟字段

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问题吗?我错误地实施了这个小组吗?除了afterfind之外还有其他解决办法吗?

1 个答案:

答案 0 :(得分:1)

试试这个

    SELECT COUNT(DISTINCT Favorite.user_id)
像那样:

 $this->virtualFields['fans'] = 'SELECT COUNT(DISTINCT id) FROM favorites  WHERE  status = 0';