2016-12-28 4 views
1

У меня есть три таблицы, которые мне нужно объединить в образовательных целях.Несколько таблиц mysql join с использованием условного предложения

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 
Смежные вопросы