Theo sự hiểu biết của tôi, bạn cần nhận được thông báo mới nhất của cuộc trò chuyện trên cơ sở mỗi người dùng (trong số 10 cuộc trò chuyện gần đây nhất)
Cập nhật: Tôi đã sửa đổi truy vấn để lấy latest_conversation_message_id
cho mọi cuộc trò chuyện của người dùng
Truy vấn dưới đây lấy thông tin chi tiết cho user_id = 2
, bạn có thể sửa đổi, users.id = 2
để tải nó cho bất kỳ người dùng nào khác
SQLFiddle , hy vọng điều này giải quyết được mục đích của bạn
SELECT
user_id,
users.name,
users2.name as sent_from_or_sent_to,
subquery.text as latest_message_of_conversation
FROM
users
JOIN
(
SELECT
text,
row_number() OVER ( PARTITION BY user_id + recipient_id ORDER BY id DESC) AS row_num,
user_id,
recipient_id,
id
FROM
private_messages
GROUP BY
id,
recipient_id,
user_id,
text
) AS subquery ON ( ( subquery.user_id = users.id OR subquery.recipient_id = users.id) AND row_num = 1 )
JOIN users as users2 ON ( users2.id = CASE WHEN users.id = subquery.user_id THEN subquery.recipient_id ELSE subquery.user_id END )
WHERE
users.id = 2
ORDER BY
subquery.id DESC
LIMIT 10
Thông tin: Truy vấn nhận thông báo mới nhất của mọi cuộc trò chuyện với bất kỳ người dùng nào khác, If user_id 2
, gửi tin nhắn tới user_id 3
, điều đó cũng được hiển thị, vì nó cho biết sự bắt đầu của một cuộc trò chuyện. Thông báo mới nhất của mọi cuộc trò chuyện với bất kỳ người dùng nào khác được hiển thị