2010-04-27 2 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 из-за MySQL «s GROUP 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

Что делать, если я использую Containable и есть соединения в моем запросе? – bakerjr

+0

@bakerjr: вам нужно сделать запрос таким образом, чтобы он переводился в действительный 'SQL', то есть не разгруппированные * и * неагрегированные столбцы в предложении SELECT. – Quassnoi

+0

Получил благодарность Квасной. Хотя я действительно хочу получить отдельные значения поля вместе с объединениями, поэтому я использую группу в своей находке (плюс сдерживаемый). Вы ответили на этот вопрос, хотя :) – bakerjr