आपको दो जुड़ने की आवश्यकता होगी। निम्नलिखित में से कुछ आपको आरंभ करना चाहिए (हालांकि मैं pm_data
के बीच संबंध को 100% नहीं समझता हूं और pm_info
):
SELECT pm_info.is_read, sender.usrFirst + ' ' + sender.usrLast as sender_name,
pm_data.date_sent, pm_data.title, pm_data.thread_id
FROM pm_info
INNER JOIN pm_data ON pm_info.thread_id = pm_data.thread_id
INNER JOIN tblUsers AS sender ON pm_data.sender_id = tblUsers.usrID
WHERE pm_info.receiver_id = @USER_ID /*in this case, 2*/
ORDER BY pm_data.date_sent DESC
मैं pm_data
. के बीच संबंध मान रहा हूं और pm_info
थ्रेड आईडी है। यदि ऐसा नहीं है, तो आपको उपरोक्त को अपनी आवश्यकता के अनुसार समायोजित करने में सक्षम होना चाहिए। मैंने यहां भेजी गई तिथि के अनुसार भी क्रमित किया है, लेकिन यह धागे को एक साथ नहीं रखेगा . मुझे यकीन नहीं है कि आप उन्हें एक साथ रखना चाहते हैं या नहीं, जिस तरह से आपने अपने प्रश्न को वाक्यांशबद्ध किया है।
यदि आप थ्रेड को एक साथ रखना चाहते हैं , आपको अधिक जटिल क्वेरी की आवश्यकता होगी:
SELECT pm_info.is_read, sender.usrFirst + ' ' + sender.usrLast as sender_name,
pm_data.date_sent, pm_data.title, pm_data.thread_id
FROM pm_info
INNER JOIN pm_data ON pm_info.thread_id = pm_data.thread_id
INNER JOIN tblUsers AS sender ON pm_data.sender_id = tblUsers.usrID
INNER JOIN (SELECT thread_id, MAX(date_sent) AS max_date
FROM pm_data
GROUP BY thread_id) AS most_recent_date
ON pm_data.thread_id = most_recent_date.thread_id
WHERE pm_info.receiver_id = @USER_ID /*in this case, 2*/
ORDER BY most_recent_date.max_date DESC, pm_data.thread_id,
pm_data.date_sent DESC
यह क्वेरी प्रत्येक थ्रेड के लिए सबसे हाल ही में संशोधित तिथि को खोजने के लिए एक उप-चयन का उपयोग करती है, फिर इसे पहले क्रमबद्ध करती है।