【问题标题】:CakePHP Using "Group By" in Virtual Field Not WorkingCakePHP 在虚拟字段中使用“分组依据”不起作用
【发布时间】:2013-06-14 12:51:28
【问题描述】:

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

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 问题吗?我是否错误地执行了该组?除了事后查找之外,还有其他解决方案吗?

【问题讨论】:

  • Page.id 只对应于 pages 表中当前行正在为其提取信息的任何 ID。例如,如果在页面 index.ctp 上显示一个表格中所有页面的列表,并显示标题和相应的粉丝数(使用我上面提到的第一个虚拟字段方法),它会显示该页面的粉丝数(除了没有不同数量的粉丝)。刚才我测试了将“WHERE Favorite.page_id = Page.id”更改为“WHERE Favorite.page_id = 1”,但我仍然收到同样的内存过多问题。所以我不认为 Page.id 没有被明确设置是问题......

标签: mysql cakephp group-by cakephp-2.2


【解决方案1】:

试试这个

    SELECT COUNT(DISTINCT Favorite.user_id)

像这样:

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

【讨论】:

  • 谢谢!!出于某种原因,我很确定那是行不通的,因为我自己尝试了 DISTINCT。但确实如此。经验教训:用尽所有选项,即使您认为它不起作用,因为它可能是“那个”恰好发生了它。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多