2015-03-04 7 views
0

Мне нужна ваша помощь. В принципе, я пытаюсь получить уникальные значения из своих таблиц. У меня есть три таблицы, а именно: разговоры, беседы и сообщения.MySQL получает уникальные значения в убывающем порядке

Диалоги Таблица:

conversation_id user_id friend_id 
1     1   2 
2     6   1 
3     1   7 
4     1   3 

Conversations_Messages Таблица:

cm_id conversation_id sender_id recipient_id message 
1  1     1   2    Hello! 
2  1     2   1    Hi! 
3  1     1   2    Hola! 
4  2     6   1    Ola! 
5  2     1   6    Gutentag! 
6  3     1   7    Eow 
7  4     1   3    Eophu 

Пользователи Таблица:

user_id  name 
1   Test 
2   Pat 
6   Ela 
7   Sophia 

Это то, что я пробовал:

SELECT c.conversation_id, cm.message, 
        CONCAT(u.firstname, ' ', u.lastname) AS sender, 
        CONCAT(u2.firstname, ' ', u2.lastname) AS recipient 
FROM `conversations` AS c 
JOIN conversation_messages AS cm 
ON c.conversation_id = cm.conversation_id 
JOIN users AS u 
ON cm.sender_id = u.user_id 
JOIN users AS u2 
ON cm.recipient_id = u2.user_id 
WHERE c.user_id = 1 
GROUP BY cm.conversation_id 

РЕЗУЛЬТАТЫ:

conversation_id message sender recipient 
1     Hello!  Test Pat 
2     Ola!  Ela  Test 
3   
etc... 

я получаю результаты, но первые сообщения возвращаются. Мне нужно вернуть последнее (по cm_Id) сообщение. Есть идеи? Я с радостью буду благодарен за вашу помощь!

+0

Пожалуйста, отредактируйте ваш вопрос. «Уникальные значения для таблицы» довольно неоднозначны. Вы также должны предоставить желаемые результаты для соответствия данным образца. –

+0

@GordonLinoff да, я сделаю –

ответ

2

Вместо простого «FROM ... JOIN ...» использовать что-то вроде этого

FROM `conversations` AS c 
JOIN  (
       SELECT MAX(cm_id) max_id, conversation_id 
       FROM  conversation_messages 
       GROUP BY conversation_id 
     ) cm_last ON (cm_last.conversation_id = c.conversation_id) 
JOIN  conversation_messages cm ON (cm.cm_id = cm_last.max_id) 

Он будет найден последним cm_id для каждого разговора, а затем присоединился к полной conversation_messages с этими идентификаторами, а не первый.

+0

Спасибо, только исправление, вы набрали c.customer_id вместо c.conversation_id –

+0

Спасибо! Исправлено это. – SeriousDron

0

Если я понял ваш вопрос, вы можете получить его, добавив «ORDER BY cm.cm_id DESC» в конце.

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