2016-06-09 4 views
0

Я пытаюсь получить последнее сообщение для группы чатов, чтобы я мог сортировать их по последнему обновленному.ORDER BY for JOIN query

Все в моем запросе отлично работает, за исключением того, что сообщение получено первым, а не последним.

Вот пример из запроса:

SELECT 
dc.id AS chat, 
dcp.*, 
dcm.created AS last_message_created 
FROM data_chats dc 
INNER JOIN data_chats_parties dcp ON dcp.chat=dc.id 
AND dcp.member=1 -- current users id 
AND dcp.status >= 1 
INNER JOIN data_chats_messages dcm ON dcm.chat=dc.id AND dcm.active=1 
WHERE dc.active=1 
GROUP BY dcp.chat 
ORDER BY dcm.created DESC 

Есть в любом случае я могу сортировать результаты из data_chats_messages в created колонке?

+0

... использование заказа по data_chats_messages.created убыв –

+0

Это ограничит все возвращенные строки. Я получаю много чатов с этим запросом. – SISYN

+0

Можете ли вы показать некоторые данные образца? 'ORDER BY last_message_created DESC' должен сначала дать самую последнюю созданную дату. –

ответ

2

Попробуйте это one.This работы во все дб ​​

SELECT 
dc.id AS chat, 
dcp.*, 
dcm.created AS last_message_created 
FROM data_chats dc 
INNER JOIN data_chats_parties dcp ON dcp.chat=dc.id 
AND dcp.member=1 -- current users id 
AND dcp.status >= 1 
INNER JOIN (select * from data_chats_messages order by created desc) dcm ON dcm.chat=dc.id AND dcm.active=1 
WHERE dc.active=1 
GROUP BY dcp.chat 
ORDER BY dc.id DESC 

Это также будет работать, но не во всех дб.

не известно, работать в MariaDB 5,5

select * from (SELECT 
    data_chats.id AS chat, 
    data_chats_parties.*, 
    data_chats_messages.created AS last_message_created 
    FROM data_chats 
    INNER JOIN data_chats_parties 
     ON data_chats_parties.chat=data_chats.id 
      AND data_chats_parties.member=1 -- current users id 
      AND data_chats_parties.status >= 1 
    INNER JOIN data_chats_messages ON data_chats_messages.chat=data_chats.id AND data_chats_messages.active=1 
    WHERE 
    data_chats.active=1 
    ORDER BY last_message_created DESC) a GROUP BY chat 
+0

пытался избежать этого, потому что он будет медленным в больших масштабах. Вместо этого вы предложили бы изменить структуру db? – SISYN

+0

Что такое тип данных 'data_chats_messages.created' в db? это временная метка? – Vinie

+0

См. Обновленный ответ, это помогает. – Vinie