2010-04-27 65 views
3

每当我做:的CakePHP和SQL Server 2008,GROUP BY工作不

$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中似乎组通过不再工作。 我该如何解决这个问题?在此先感谢SQL大师

回答

1

查询被翻译成这样的:

SELECT * 
FROM Job 
GROUP BY 
     some_field 

这不是根据SQL标准有效的查询,但是,它在MySQL因为MySQLGROUP BY扩展的工作。

你需要离开只有分组的列或聚集的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 
    )); 
+0

如果我在使用中可容纳和有哪些加入我的查询? – bakerjr 2010-04-27 10:31:54

+0

@bakerjr:你需要让你查询,以便它转化为一个有效的'SQL',那就是'SELECT'子句中没有*和* unaggregated列。 – Quassnoi 2010-04-27 10:36:20

+0

感谢Quassnoi。虽然我真正想要的是获得一个字段的独特价值和连接,这就是为什么我在我的find(加上可容纳)中使用group的原因。 虽然你在这篇文章中回答了这个问题:) – bakerjr 2010-04-27 10:39:06