GROUP BY возвращает первую запись - PullRequest
11 голосов
/ 02 марта 2010

Насколько я знаю, группы mysql GROUP BY для последней найденной записи.

Есть ли решение для GROUP BY первой записи?

Я настроил ORDER в команде SQL иМне нужно, чтобы GROUP BY вернул первую запись, а не последнюю.

РЕДАКТИРОВАТЬ

Вот запрос

SELECT 
  DISTINCT(master.masterID),
  langData.*,
  master.* 
FROM master_table as master 
INNER JOIN lang_table as langData ON 
langData.masterID=master.masterID 
GROUP BY master.masterID 
ORDER BY 
CASE 
    WHEN langData.lang='currentLang' THEN 1 ELSE 999 END , 
    master.name desc LIMIT 0,10 

В приведенном выше запросе выберитеmasterID для мультиязычной таблицы и предположим, что нужно вернуть ПЕРВЫЕ записи в currentLang и упорядочить их по имени И ТОГДА на всех других языках.

Не спрашивайте меня, почему я не установил язык в JOIN,Это способ сделать.

Так что все работает нормально, пока ожидаю сценарий, что у меня есть запись с языками en и fr.Если currentLang равно en, то на основе

langData.lang='currentLang' THEN 1 ELSE 999 END

порядок en равен 1, а порядок fr равен 999, и вместо получения значения en я получаю значение fr.

Вот почему я хочу сгруппировать в первый ряд.

Ответы [ 2 ]

11 голосов
/ 02 марта 2010

Я полагаю, вы говорите о чем-то вроде

SELECT  *
FROM    mytable
GROUP BY
        column

Вы не должны использовать неагрегированные выражения в GROUP BY, если они не совпадают внутри группы.

Если вы хотите вернуть запись, содержащую наименьшее значение выражения в группе, используйте это:

SELECT  mo.*
FROM    (
        SELECT  DISTINCT column
        FROM    mytable
        ) md
JOIN    mytable mo
ON      mo.id = 
        (
        SELECT  id
        FROM    mytable mi
        WHERE   mi.column = md.column
        ORDER BY
                mi.column, mi.someorder
        LIMIT 1
        )
1 голос
/ 02 марта 2010

Добавьте LIMIT 1 к вашему запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...