2014-12-07 2 views
0

Я две таблицыПолучить последнюю запись по дате для пользователя в MySQL

user_conversation 
----------------- 
id 
from_user_id 
to_user_id 
item_id 
offer_detail_id 
message_type 
deleted_by_sender 
deleted_by_receiver 

user_conversation_reply 
----------------------- 
id 
from_user_id 
message_text 
sent_date 
conversation_id 
is_read 

Всякий раз, когда новый разговор начинается с любым элементом запись будет введена в user_conversation_table и сообщениях будут записана в user_conversation_reply таблицу для этого разговора. Аналогично, для этой беседы в user_conversation_table могут быть добавлены разные сообщения.

Я хочу получить все разговоры пользователя. (т. е. from_user_id, to_user_id, item_id составляет комбинацию), и вместе с тем мне нужно иметь последнее сообщение этой беседы.

user_conversation 

id  from_user_id  to_user_id  item_id 
1   8    2    1 

user_conversation_reply 

id  from_user_id  message  conversation_id sent_date 
1   8    helo    1   2014-12-07 
2   8   how r u    1   2014-12-08 

Пользователь может быть частью разговора. Итак, я хочу получить последнее сообщение о разговоре каждого разговора пользователя.

Я использую этот запрос для фильтрации записей для пользователя.

Select * from user_conversation where to_user_id = 2; 

Прошу предложить.

Спасибо, Фейсал Nasir

ответ

1

Assumming что user_conversation_reply.id является первичным ключом автоинкрементным,
и последнее сообщение всегда имеет самый высокий id

SELECT * 
FROM (
    Select uc.id, max(ucr.id) max_ucr 
    from user_conversation uc 
    JOIN user_conversation_reply ucr ON ucr.conversation_id = uc.id 
    where uc.to_user_id = 2 
    GROUP BY uc.id 
) q 
JOIN user_conversation uc ON q.id = uc.id 
JOIN user_conversation_reply ucr ON q.max_ucr = ucr.id 
; 
Смежные вопросы