【问题标题】:SQL - Select distinct but return all columns with CakePHP FindSQL - 使用 CakePHP Find 选择不同但返回所有列
【发布时间】:2014-02-18 00:16:48
【问题描述】:

我希望使用 cakephp 做同样的事情:

https://stackoverflow.com/a/6127471

    $eachRWithCode = $this->MovieReview->find( 'all', array(
    'fields' => 'MovieReview.*',
    'group' => array('MovieReview.code'),
    'recursive' => '-1',
    'nofilter' => true,
    'order' => 'MovieReview.code'
    ));

此代码给出错误:

错误:列“MovieReview.id”必须出现在 GROUP BY 子句中或用于聚合函数中

【问题讨论】:

    标签: sql cakephp select find distinct


    【解决方案1】:

    您使用的是什么 DBMS? Mysql 让你显示你不在聚合函数中使用的列(但你不是,但其他 DBMS 没有。所以你想显示的每一列都必须放在聚合函数中,例如 MAX() 或 @ 987654322@或COUNT()

    所以你必须这样做(假设你有一个分数列):

    $eachRWithCode = $this->MovieReview->find( 'all', array(
        'fields' => array(
            'COUNT(MovieReview.id)',
            'AVG(MovieReview.score),
            'MAX(MovieReview.code)
         ),
        'group' => array('MovieReview.code'),
        'recursive' => '-1',
        'nofilter' => true,
        'order' => 'MovieReview.code'
        ));
    

    【讨论】:

    • 我正在使用 PSQL。这就说得通了。很确定我不需要为 MAX(MovieReview.code) 使用 MAX,因为它在 group by 子句中。是否可以从与组匹配的单个记录中获取字段值?
    • 请解释一下您的意思
    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多