2016-12-28 11 views
1

私は教育目的で参加する必要がある3つのテーブルがあります。条件付き節を使用して複数の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 
関連する問題