[英]Sql Query to join 4 tables using if condition or CASE
我有4张桌子聊天。
表1 (主注释表,表2中考虑了表1的用户)
ID
评论
表2 (在表1中添加新注释时,表2也将使用注释者的user_id更新)
comment_id(表1的引用)
用户身份
表3 (做了一些其他工作,但通过comment_id与表1相关)
ID
column_related_to_table-3
comment_id
用户身份
表4 (做了一些其他工作,但通过comment_id与表1相关)
ID
column_related_to_table-4
comment_id
用户身份
现在,我想从所有表(Table-2,Table-3,Table-4)中获取comment_id,最后,如果其中一个表中存在特定用户,则使用Table-1中的comment_id获得注释。
SELECT A.id,A.comment,
FROM Table-1 A
LEFT JOIN Table-2 B
ON B.comment_id = A.id
LEFT JOIN Table-3 C
ON C.comment_id = A.id OR C.user_id = {$current_user}
LEFT JOIN Table-4 D
ON D.comment_id = A.id OR D.user_id = {$current_user}
WHERE B.`user` = {$current_user}
GROUP BY A.`id`
ORDER BY A.`id` DESC
LIMIT 7 OFFSET 0
我也尝试了3张桌子的联合
Select A.id AS cid
FROM Table-1 A
LEFT JOIN Table-2 B
ON B.comment_id = A.id
WHERE B.user_id = {$current_user}
UNION
Select C.comment_id AS cid
FROM Table-3 C
WHERE C.user_id = {$current_user}
UNION
Select D.comment_id AS cid
FROM Table-4 D
WHERE D.user_id = {$current_user}
但是在这里我不知道如何使“按id
,按id
DESC LIMIT 7 OFFSET 0”工作,也不知道如何使用ID从表1中获取注释。联盟。
表1(活动)表2(注释)表2(注释)ID作为数据ID连接到表1(活动)。 我在表1中链接表2(以了解时间和评论的用户等)。
表3(聊天)这里的概念就像一个注释可以具有由聊天代表的线程。 它将始终与评论相关。
表4(chat_followers)这里可以对其他用户执行ping操作,因此在聊天中被ping的所有用户都将在此处
最后的想法是,如果他已经写了该用户的评论,或者已经在聊天室中回复了该用户的所有评论(评论的主题),或者如果他被其他任何人ping通,那么该想法将得到“用户的所有评论”。
由于除了表2、3、4中的注释ID之外,您不想要任何数据,因此为什么不使用简单的IN子句?
SELECT *
FROM Table1 A
WHERE A.id IN
(SELECT Comment_Id FROM Table2 WHERE.... UNION ALL
SELECT Comment_ID FROM Table3 WHERE... UNION ALL
SELECT Comment_Id FROM Table4 WHERE...)
GROUP BY A.`id`
ORDER BY A.`id` DESC
LIMIT 7 OFFSET 0
如果您确实想使用其他表中的其他列,则可以通过LEFT OUTER JOIN来使用:
SELECT A.id,A.comment
FROM
Table-1 A LEFT JOIN
Table-2 B ON B.comment_id = A.id AND B.User = currentUserId LEFT JOIN
Table-3 C ON C.comment_id = A.id AND C.User = currentUserId LEFT JOIN
Table-4 D ON D.comment_id = A.id AND D.User = currentUserId
WHERE B.id IS NOT NULL OR C.id IS NOT NULL OR D.id IS NOT NULL
GROUP BY A.`id`
ORDER BY A.`id` DESC
LIMIT 7 OFFSET 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.