मेरी समझ के अनुसार, आपको प्रति उपयोगकर्ता के आधार पर बातचीत का नवीनतम संदेश प्राप्त करने की आवश्यकता है (पिछले 10 नवीनतम वार्तालापों में से)
अपडेट करें: मैंने latest_conversation_message_id
. प्राप्त करने के लिए क्वेरी को संशोधित किया है प्रत्येक उपयोगकर्ता वार्तालाप के लिए
नीचे दी गई क्वेरी में user_id = 2
. का विवरण मिलता है , आप संशोधित कर सकते हैं, users.id = 2
इसे किसी अन्य उपयोगकर्ता के लिए प्राप्त करने के लिए
SQLFiddle , आशा है कि यह आपके उद्देश्य को हल कर देगा
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
जानकारी: क्वेरी को किसी भी अन्य उपयोगकर्ता के साथ हर बातचीत का नवीनतम संदेश मिलता है, यदि user_id 2
, user_id 3
. को एक संदेश भेजता है , वह भी प्रदर्शित होता है, क्योंकि यह वार्तालाप की शुरुआत को इंगित करता है। किसी अन्य उपयोगकर्ता के साथ हर बातचीत का नवीनतम संदेश प्रदर्शित होता है