Avrai bisogno di due join. Qualcosa come il seguente dovrebbe iniziare (anche se non capisco al 100% la relazione tra pm_data
e 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
Sto assumendo la relazione tra pm_data
e pm_info
è l'ID del thread. In caso contrario, dovresti essere in grado di adattare quanto sopra a tutto ciò di cui hai bisogno. Ho anche ordinato per data di invio qui, ma non terrà insieme i thread . Non sono sicuro se vuoi tenerli insieme o meno dal modo in cui hai formulato la tua domanda.
Se vuoi tenere insieme le discussioni , avrai bisogno di una query più complicata:
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
Questa query utilizza una sottoselezione per trovare la data di modifica più recente per ogni thread, quindi ordina prima in base a questa.