SQL查询使用if条件或CASE

时间:2019-04-11 15:54:07

标签: mysql sql

我有4个聊天桌。

表1 (主注释表,从表2中考虑了表1的用户)


id

评论


表2 (每当在表1中添加新评论时,表2也会使用评论者的user_id进行更新)


comment_id(表1的引用)

user_id


表3 (做了一些其他工作,但通过comment_id与表1相关)


id

column_related_to_table-3

comment_id

user_id


表4 (做了一些其他工作,但通过comment_id与表1相关)


id

column_related_to_table-4

comment_id

user_id


现在,我想从所有表(表2,表3,表4)中获取comment_id,最后,如果其中一个表中存在特定用户,则使用表1中的注释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} 

但是在这里,我不知道如何获取“ A组{。{1}},A组id DESC” LIMIT 7 OFFSET 0“正常工作,并且不知道如何使用ID来自联合的ID从表1中获取评论。

enter image description here

enter image description here

表1(活动) 表2(评论) 表2(注释)的ID作为数据ID连接到表1(活动)。 我在表1中链接表2(以了解时间和评论的用户等)。

表3(聊天) 这里的概念就像一个评论可以具有由聊天代表的主题。它将始终与评论相关。 enter image description here

表4(聊天追随者) 在这里,人们可以向其他用户执行ping操作,因此在聊天中被ping的所有人都将在此处 enter image description here

最后的想法是,如果他已经写了该用户的评论或在聊天中回复了该用户的所有评论(评论的主题),或者被其他人ping通了。

1 个答案:

答案 0 :(得分:0)

由于除了表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