sql >> Database teknologi >  >> RDS >> Mysql

MySQL Vælg JOIN 3 tabeller

Du skal bruge to joins. Noget som det følgende burde få dig i gang (selvom jeg ikke 100 % forstår forholdet mellem pm_data og 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

Jeg antager forholdet mellem pm_data og pm_info er trådens id. Hvis det ikke er det, bør du være i stand til at justere ovenstående til det, du har brug for. Jeg har også sorteret efter dato sendt hertil, men det vil ikke holde trådene sammen . Jeg er ikke sikker på, om du vil holde dem sammen eller ej ud fra den måde, du har formuleret dit spørgsmål på.

Hvis du vil holde tråde sammen , skal du bruge en mere kompliceret forespørgsel:

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

Denne forespørgsel bruger et undervalg til at finde den seneste ændrede dato for hver tråd, og sorteres derefter efter denne først.



  1. Sådan fungerer RPAD()-funktionen i MySQL

  2. Optimal forespørgsel efter seneste rekord for hver N

  3. Hvordan øges dbms_output buffer?

  4. Streng afkortes i længden, men ingen opskæring af ord tilladt