1

我在 MySQL 中有 5 个表,但我相信这是一个 SQL 问题

用户

在此处输入图像描述

用户信息

在此处输入图像描述

USER_RIGHTS

在此处输入图像描述

101 = 正确读取

102 = 正确写入

在此处输入图像描述

帖子

在此处输入图像描述

现在我想为用户 2 选择例如,用户 2 在该组中具有读取权限 101 的任何用户发布的所有帖子

例如我有 3 个帖子

帖子 1 发布在第 1 组中 帖子 2 发布在第 1 组中 帖子 3 发布在第 2 组中 帖子 4 发布在第 1 组中

WHERE user2 has 101 right in group 1 ==> SHOW post1 2 3

或者

WHERE user2 has 101 right in group 2 ==> SHOW post2

或者

WHERE user2 has 101 right in both group 1 and group 2 ==> SHOW post2

到目前为止我所拥有的是

SELECT * FROM posts
INNER
    JOIN user_info
    ON posts.posted_by = user_info.user_id  
INNER
    JOIN groups
    ON posts.posted_in = groups.group_id
INNER
    JOIN user_rights
    ON user_rights.user_id = user_info.user_id
WHERE user_rights.right = '101' AND user_info.user_id = ".$UserId." ORDER BY id DESC;

这段代码将所有帖子返回给我 2 次。

4

1 回答 1

1

我非常相信这一点

select * from posts 
inner join 
(select group from user_rights where right = 101 and user_id = 1) as rights
on posts.posted_in = rights.group

可以在 SQL Server 中工作(这里没有一个可以检查语法)。
一方面,我选择了 ID 为 1 的用户具有读取权限
的所有组,另一方面,我选择了帖子。
剩下的就是它们之间的内部连接。

于 2012-06-15T19:04:40.757 回答