MySQL Select JOIN 3 Таблицы

У меня есть три основных таблицы:

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

Кажется, это работает для меня (пока).

Ответы на вопрос(2)

Ваш ответ на вопрос