我有四张桌子可以聊天。
表-1(主注释表,表-1的用户来自表-2)
id
评论
表-2(当表-1中添加了新的注释时,表-2也将使用注释的user_id进行更新)
Comment_id(参考表-1)
user_id
表-3(做一些其他工作但与表-1通过comment_id相关)
id
与表-3相关的列
comment_id
user_id
表-4(做了一些其他工作,但通过comment_id与表1相关)
id
与表-4相关的列
comment_id
user_id
现在,我希望从所有表(表-2、表-3、表-4)中获得注释_id,最后如果表中的任何一个表中的特定用户使用这些注释_id从表-1获得注释。
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我也试过三张桌子的组合
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.id,命令由A.id DESC限制7偏移量0”工作,也不知道如何使用id从联合得到从表1的注释。


表-1(活动)表-2(注释)表-2(注释) id连接到表-1(活动)作为数据id。我是链接表-2(了解时间和评论用户等)在表-1。
表3(聊天)这里的概念就像一个注释可以有线程,它是由chat表示的。它将永远与评论有关。

表-4(Chat_followers)这里我们可以向其他用户切换,所以聊天中的所有用户都会在这里。

最终的想法是,如果他写了评论或者在聊天中回复了(评论的线程),或者他被其他人点击了,那么他就会得到“用户的所有评论”。
发布于 2019-04-11 16:06:25
既然您不需要表2、3、4中的注释IN以外的任何数据,那么为什么不使用一个简单的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如果您确实希望使用其他表中的其他列,则可以使用左外部联接来完成此操作:
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 0https://stackoverflow.com/questions/55636616
复制相似问题