我有两张桌子
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;
请建议。
谢谢, 费萨尔纳西尔
答案 0 :(得分:1)
假设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
;