Je hebt twee joins nodig. Iets als het volgende zou u op weg moeten helpen (hoewel ik de relatie tussen pm_data
niet 100% begrijp en 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
Ik neem aan dat de relatie tussen pm_data
en pm_info
is de thread-ID. Als dit niet het geval is, zou je het bovenstaande moeten kunnen aanpassen aan wat je nodig hebt. Ik heb ook gesorteerd op datum die hierheen is verzonden, maar het houdt de discussies niet bij elkaar . Ik weet niet zeker of je ze bij elkaar wilt houden of niet, gezien de manier waarop je je vraag hebt gesteld.
Als je discussielijnen bij elkaar wilt houden , heb je een meer gecompliceerde vraag nodig:
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
Deze zoekopdracht gebruikt een subselectie om de meest recente wijzigingsdatum voor elke thread te vinden en sorteert vervolgens eerst op deze.