|
|
@@ -3,20 +3,35 @@
|
|
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
|
<mapper namespace="com.campus.trade.mapper.MessageMapper">
|
|
|
<select id="selectConversations" resultType="com.campus.trade.vo.ConversationVO">
|
|
|
+ -- 子查询找出每个对话的最新消息ID
|
|
|
SELECT
|
|
|
- CASE WHEN m.from_user_id = #{userId} THEN m.to_user_id ELSE m.from_user_id END AS userId,
|
|
|
- u.nickname, u.avatar_url,
|
|
|
- m.content AS lastMessage,
|
|
|
- m.image_url AS lastMessageImage,
|
|
|
- m.created_at AS lastMessageTime,
|
|
|
- (SELECT COUNT(*) FROM message WHERE to_user_id = #{userId}
|
|
|
- AND from_user_id = CASE WHEN m.from_user_id = #{userId} THEN m.to_user_id ELSE m.from_user_id END
|
|
|
- AND is_read = 0) AS unreadCount
|
|
|
- FROM message m
|
|
|
- JOIN user u ON u.id = CASE WHEN m.from_user_id = #{userId} THEN m.to_user_id ELSE m.from_user_id END
|
|
|
- WHERE m.from_user_id = #{userId} OR m.to_user_id = #{userId}
|
|
|
- GROUP BY userId
|
|
|
- ORDER BY MAX(m.created_at) DESC
|
|
|
+ otherUser.id AS userId,
|
|
|
+ otherUser.nickname,
|
|
|
+ otherUser.avatar_url,
|
|
|
+ lastMsg.content AS lastMessage,
|
|
|
+ lastMsg.image_url AS lastMessageImage,
|
|
|
+ lastMsg.created_at AS lastMessageTime,
|
|
|
+ (SELECT COUNT(*) FROM message
|
|
|
+ WHERE to_user_id = #{userId}
|
|
|
+ AND from_user_id = otherUser.id
|
|
|
+ AND is_read = 0) AS unreadCount
|
|
|
+ FROM (
|
|
|
+ -- 为每个对话伙伴找出最新消息的时间
|
|
|
+ SELECT
|
|
|
+ CASE WHEN m.from_user_id = #{userId} THEN m.to_user_id ELSE m.from_user_id END AS partner_id,
|
|
|
+ MAX(m.created_at) AS max_created_at
|
|
|
+ FROM message m
|
|
|
+ WHERE m.from_user_id = #{userId} OR m.to_user_id = #{userId}
|
|
|
+ GROUP BY partner_id
|
|
|
+ ) latest
|
|
|
+ -- 关联获取最新消息的完整信息
|
|
|
+ JOIN message lastMsg ON (
|
|
|
+ (lastMsg.from_user_id = #{userId} AND lastMsg.to_user_id = latest.partner_id)
|
|
|
+ OR (lastMsg.from_user_id = latest.partner_id AND lastMsg.to_user_id = #{userId})
|
|
|
+ ) AND lastMsg.created_at = latest.max_created_at
|
|
|
+ -- 关联获取对方用户信息
|
|
|
+ JOIN user otherUser ON otherUser.id = latest.partner_id
|
|
|
+ ORDER BY lastMsg.created_at DESC
|
|
|
</select>
|
|
|
<select id="selectHistory" resultType="Message">
|
|
|
SELECT * FROM message
|