我的网页模型上有以下虚拟字段
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之外还有其他解决办法吗?
答案 0 :(得分:1)
试试这个
SELECT COUNT(DISTINCT Favorite.user_id)
像那样:
$this->virtualFields['fans'] = 'SELECT COUNT(DISTINCT id) FROM favorites WHERE status = 0';