2010-11-18 2 views
0

У меня есть следующие LEFT JOIN заявление (хотя, вероятно, относится и к еще более простой ЗЕЬЕСТ):Присоединиться к заявлению ... как делать ORDER BY?

SELECT * FROM t1 LEFT JOIN t2 ON t2.c = t1.c WHERE t1.m LIKE 'captain%' GROUP BY  
t1.c ORDER BY t2.date DESC LIMIT 0,10 

Результаты получить вернулся, но они не упорядочены по t2.date DESC ... Я полагаю, что это из-за наличия там предложения GROUP BY. Как я могу группировать результаты и заказывать их?

ТНХ

ответ

0

Поместите свой запрос в подзапрос, а затем используйте ORDER BY.

SELECT * 
FROM 
(SELECT * 
    FROM t1 LEFT JOIN t2 ON t2.c = t1.c 
    WHERE t1.m LIKE 'captain%' 
    GROUP BY t1.c DESC LIMIT 0,10) l1 
ORDER BY date 
0

В обычном SQL было бы даже не позволено ORDER BY t2.date, потому что вы не группируя на него, и вы не используете агрегатную функцию на нем, так что вы не можете выбрать его.

В любом случае, поскольку MySQL просто выбирает значения из строк неопределенным образом, а затем сортирует их, столбец t2.date в результатах поиска должен быть отсортирован. Пожалуйста, покажите некоторый фактический результат.

+0

Возможно, это просто моя незнакомость с MySQL, но что это за результат SELECT *, а GROUPING на одном столбце? Первое, что я ожидаю, - « недействителен в списке SELECT, потому что он не содержится в агрегатной функции или в предложении GROUP BY» ... Можете ли вы не просто добавить t2.date в GROUP BY? –

+0

@ginius Нет, он не игнорирует ORDER BY. Я сомневаюсь, что значения t2.date не в порядке, поэтому вы должны показать их. – AndreKR

+0

@djacobson: Вы правы ожидать этого, но MySQL (в режиме по умолчанию) работает немного по-другому: он выбирает неопределенные (случайные) значения для этих столбцов. – AndreKR

Смежные вопросы