【问题标题】:CakePHP and SQL Server 2008, Group By not workingCakePHP 和 SQL Server 2008,Group By 不工​​作
【发布时间】:2010-04-27 10:26:57
【问题描述】:

每当我做:

$this->Job->find('all', array(
        'group' => array('Job.some_field'),
        'recursive' => -1
    ));

我得到一个:

SQL Error: Column 'jobs.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

使用 MySQL 它可以正常工作,但使用 SQL Server 2008 似乎 group by 不再工作了。 我该如何解决?在此先感谢 SQL 大师

【问题讨论】:

    标签: sql sql-server tsql cakephp group-by


    【解决方案1】:

    查询被翻译成这样的:

    SELECT  *
    FROM    Job
    GROUP BY
            some_field
    

    根据SQL 标准,这不是一个有效的查询,但是,由于MySQLGROUP BY 扩展,它在MySQL 中有效。

    您只需要在SELECT 子句中保留分组列或聚合:

    SELECT  some_field, COUNT(*)
    FROM    Job
    GROUP BY
            some_field
    

    类似这样的:

    $this->Job->find('all', array(
            'fields' => array('Job.some_field', 'COUNT(*)'),
            'group' => array('Job.some_field'),
            'recursive' => -1
        ));
    

    【讨论】:

    • 如果我使用可包含并在我的查询中有联接怎么办?
    • @bakerjr:您需要进行查询,以便将其转换为有效的SQL,即SELECT 子句中没有未分组的 未聚合列。
    • 知道了,谢谢 Quassnoi。虽然我真正想要的是获得一个字段的不同值以及连接,这就是为什么我在我的查找中使用组(加上可包含)。不过你回答了这篇文章的问题:)
    • @bakerjr:如果您需要DISTINCT 值,您很可能会从将连接重写为IN 条件中受益。
    • 我想我不得不把它写成 cake 中的自定义查询,你同意吗? ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多