Anda akan membutuhkan dua gabungan. Sesuatu seperti berikut ini akan membantu Anda memulai (walaupun saya tidak 100% memahami hubungan antara pm_data
dan 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
Saya mengasumsikan hubungan antara pm_data
dan pm_info
adalah id threadnya. Jika tidak, Anda harus dapat menyesuaikan di atas dengan apa pun yang Anda butuhkan. Saya juga telah mengurutkan berdasarkan tanggal pengiriman ke sini, tetapi itu tidak akan menyatukan utas . Saya tidak yakin apakah Anda ingin menyatukannya atau tidak dari cara Anda mengutarakan pertanyaan.
Jika Anda ingin menyatukan utas , Anda memerlukan kueri yang lebih rumit:
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
Kueri ini menggunakan subpilihan untuk menemukan tanggal modifikasi terbaru untuk setiap utas, lalu urutkan berdasarkan ini terlebih dahulu.