Necesitarás dos uniones. Algo como lo siguiente debería ayudarlo a comenzar (aunque no entiendo al 100% la relación entre pm_data
y 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
Estoy asumiendo la relación entre pm_data
y pm_info
es la identificación del hilo. Si no es así, debería poder ajustar lo anterior a lo que necesite. También he ordenado por fecha de envío aquí, pero no mantendrá los hilos juntos . No estoy seguro de si desea mantenerlos juntos o no por la forma en que ha formulado su pregunta.
Si desea mantener los hilos juntos , necesitará una consulta más complicada:
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
Esta consulta usa una subselección para encontrar la fecha de modificación más reciente para cada hilo, luego ordena por esto primero.