Ще ви трябват две връзки. Нещо като следното трябва да ви помогне да започнете (въпреки че не разбирам на 100% връзката между pm_data
и 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
Предполагам връзката между pm_data
и 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
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
Тази заявка използва подселекция, за да намери най-новата модифицирана дата за всяка нишка, след което първо сортира по нея.