Du behöver två anslutningar. Något i stil med följande borde få dig igång (även om jag inte till 100 % förstår sambandet mellan pm_data
och 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
Jag antar relationen mellan pm_data
och pm_info
är trådens id. Om det inte är det bör du kunna justera ovanstående till vad du behöver. Jag har också sorterat efter datum som jag skickade hit, men det kommer inte att hålla ihop trådarna . Jag är inte säker på om du vill hålla ihop dem eller inte utifrån hur du har formulerat din fråga.
Om du vill hålla ihop trådar , du behöver en mer komplicerad fråga:
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
Den här frågan använder ett underval för att hitta det senaste ändrade datumet för varje tråd och sorteras sedan efter detta först.