2014-12-23 2 views
0

У меня есть следующий запрос:MySQL LEFT JOIN выберите верхнее значение из одной таблицы

SELECT chat.*, message.time as last_message, message.content as last_message_content 
FROM chat 
LEFT JOIN message ON chat.id = message.chat_id 
GROUP BY chat.id 
ORDER BY message.time ASC 

сейчас, я хочу, чтобы выбрать самую новую message.time, но сейчас это дает мне первый ..

любая идея о том, как это можно сделать?

благодаря

+0

'MAX (message.time)'? –

+0

Можете ли вы разместить небольшой образец каждой таблицы вместе с образцом желаемого результата запроса из этих таблиц? Вы столкнулись с распространенным злоупотреблением «GROUP BY» в MySQL - если мы увидим пример того, как вы хотите, чтобы результаты выглядели, мы можем установить вас на правильном пути. В частности, нам нужно знать, хотите ли вы самое последнее сообщение .time для каждой группы или самой последней для всей таблицы. –

+0

Возможно ли иметь «чат» без «сообщений»? – Strawberry

ответ

-1

разбирайтесь, чтобы DESC, чтобы получить новейшее сообщение.

0

Используйте подзапрос, чтобы в последний раз сообщения для чата и присоединиться к этой спине к message таблице:

SELECT c.*, m.time as last_message, m.content as last_message_content 
FROM chat c LEFT JOIN 
    (select chat_id, max(time) as last_message_time 
     from message 
     group by chat_id 
    ) ml 
    ON c.id = ml.chat_id LEFT JOIN 
    message m 
    ON m.chat_id = ml.chat_id and m.time = ml.lst_message_time 
ORDER BY m.time ASC; 

Не используйте group by, как вы использовали его. Столбцы от message относятся к неопределенным строк, поэтому вы не можете контролировать, какие значения выбраны.

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