mysql - 使用if条件或CASE连接4个表的Sql查询

标签 mysql sql

我有 4 张 table 可供聊天。

Table-1(主要评论表,Table-1的用户是从Table-2考虑的)

<小时/>

ID

评论

<小时/>

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

<小时/>

comment_id(引用表1)

用户 ID

<小时/>

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

<小时/>

ID

与表3相关的列

comment_id

用户 ID

<小时/>

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

<小时/>

ID

与表4相关的列

comment_id

用户 ID

<小时/>

现在我想从所有表(表 2、表 3、表 4)中获取 comment_id,最后如果特定用户出现在任一表中,则使用表 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} 

但是这里我不知道如何获取“GROUP BY A.id, ORDER BY A.id DESC LIMIT 7 OFFSET 0"正在工作,但不知道如何使用我从 union 获得的 id 从 Table-1 中获取注释。

enter image description here

enter image description here

表1(事件) 表2(评论) Table-2(评论)id 作为 data-id 连接到 table-1(事件)。 我在表 1 中链接表 2(以了解时间和评论用户等)。

表3(聊天) 这里的概念就像一个评论可以有由聊天代表的线程。它总是与评论相关。 enter image description here

表4(chat_followers) 在这里,您可以 ping 到其他用户,这样在聊天中 ping 到的所有用户都会在这里 enter image description here

最后,我们的想法是获取“用户的所有评论”,如果他写了该评论或在聊天中回复(评论的线程)或者如果他被其他任何人 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

关于mysql - 使用if条件或CASE连接4个表的Sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55636616/

相关文章:

mysql - 从我的查询中过滤掉特定的电子邮件域

sql - 按顺序使用 asc 和 desc 变量

mysql - 自动递增和顺序

c# - 如何在 EF Core 中按条件获取最新条目?

SQL 按喜欢排序

sql - 如何使用 CASE 来更改从数据库检索的数据

php - 接收订单详情和付款确认(电子商务网站)

mysql - Tricky Triple Sql Join 寻找最近的日期

mysql - 笛卡尔连接不匹配的行

MySQL使用过程获取多行和多列