2016-12-28 17 views
1

我有三個表,我需要加入教育目的。使用條件子句多連接mysql表

Table: users 
id | username | photo 
    1 | me  | my_photo 
    2 | my_friend| friend's photo 
    3 | somebody | somebody`s photo 

Table: chat 
mid | sender | receiver | created 
    1 | me  | my friend| 2016-12-27 09:32:2 
    2 | my_friend | me  | Y-m-d h:i:s 
    3 | me  | somebody | 2016-12-27 09:32:2 
    4 | somebody | me  | Y-m-d h:i:s 

Table:favorites 
    id | subscriber | subscribed_to 
    1 | me   | my_friend 

所需的輸出是

Conversations: 
username | photo   | created   | subscribed 
me  | my friend's photo| 2016-12-27 09:32:2 | yes 
my_friend | my foto   | Y-m-d h:i:s  | no 
me  | somebody's foto | 2016-12-27 09:32:2 | no 
somebody | my foto   | Y-m-d h:i:s  | no 

目前我沒有使用該代碼的第一部分:

$qmessage = mysql_query(" 
select c.*, u.photo 
from chat c 
join users u on u.username = c.sender 
WHERE (sender = '$login_session' AND receiver = '$uid') OR 
     (sender = '$uid' AND receiver = '$login_session') 
"); 

回答

0

我想了一系列的連接是你真正需要的在這裏。下面查詢中唯一可能需要解釋的部分是最後的左連接。我使用發送者列和接收者列將chat表加入favorites表。然後我使用CASE表達式來檢查給定記錄是否匹配。如果是這樣,那麼它假定有訂閱並且'yes'被打印,否則打印'no'

SELECT t1.sender AS username, 
     COALESCE(t2.photo, 'NA') AS photo 
     t1.created, 
     CASE WHEN t3.subscriber IS NOT NULL THEN 'yes' ELSE 'no' END AS subscribed 
FROM chat t1 
LEFT JOIN users t2 
    ON t1.receiver = t2.username 
LEFT JOIN favorites t3 
    ON t1.sender = t3.subscriber AND 
     t1.receiver = t3.subscribed_to