У меня есть три основных таблицы:
tblUsers:
usrID usrFirst usrLast
1 John Smith
2 Bill Jones
3 Jane Johnson
pm_data:
id date_sent title sender_id thread_id content
2 2009-07-29 18:46:13 Subject 1 1 111 Message 2!
3 2009-07-29 18:47:21 Another Subject 1 222 Message 3!
pm_info:
id thread_id receiver_id is_read
1 111 2 0
2 111 3 0
3 222 2 0
4 222 3 0
По сути, я пытаюсь создать почтовый ящик.
Итак, если usrID 2 (Билл Джонс) откроет свою папку «Входящие», он увидит, что он 2 непрочитанных (отсюда и столбец «is_read») сообщения (темы # 111 и # 222).
По сути, мне нужно знать, как настроить оператор SELECT для объединения всех трех таблиц (взаимосвязь между pm_data и pm_info дает информацию о сообщении, в то время как взаимосвязь между tblUsers и pm_data вызывает «отображаемое имя» отправитель), чтобы показать самую последнюю (по метке времени?) ветку сверху.
Таким образом, мы увидим что-то вроде этого:
<?php $usrID = 2; ?>
<table id="messages">
<tr id="id-2">
<td>
<span>
From: John Smith
</span>
<span>2009-07-29 18:47:21</span>
</td>
<td>
<div>Another subject</div>
</td></tr>
<tr id="id-1">
<td>
<span>
From: John Smith
</span>
<span>2009-07-29 18:46:13</span>
</td>
<td>
<div>Subject 1</div>
</td></tr>
</table>
Надеюсь, это имеет смысл! Спасибо за любую помощь!
РЕДАКТИРОВАТЬ: Вот мой окончательный ответ:
Я воспользовался советом lc и установил связь между двумя таблицами на основе идентификатора (добавил столбец с именем 'message_id' в pm_info).
Затем немного подправили оператор MySQL, чтобы придумать следующее:
SELECT pm_info.is_read, sender.usrFirst as sender_name,
pm_data.date_sent, pm_data.title, pm_data.thread_id
FROM pm_info
INNER JOIN pm_data ON pm_info.message_id = pm_data.id
INNER JOIN tblUsers AS sender ON pm_data.sender_id = sender.usrID
WHERE pm_data.date_sent IN(SELECT MAX(date_sent) FROM pm_data WHERE pm_info.message_id = pm_data.id GROUP BY thread_id) AND pm_info.receiver_id = '$usrID' ORDER BY date_sent DESC
Кажется, это работает для меня (пока).