这可能是一个稍微令人困惑的问题。我有一个用户帖子表,其中有一列权限确定谁可以查看帖子:0 = 公开,1 = 仅限订阅者,2 = 仅限联系人。
我有另一个表“订阅”,其中包含 Subscriber_ID 和 Subscribed_to_ID 列,还有另一个表“联系人”,其中包含 User1_ID 和 User2_ID 列。
我对复杂的 MySQL 查询没有太多经验,我通常只需要基本查询,但这是我想要做的:
我正在寻找一种在这些条件下从帖子表中选择帖子的方法:
- 如果用户既不是订阅者也不是帖子作者的联系人,则只返回公共帖子(Permission 为 0 的帖子)
- 如果用户订阅了帖子作者,则返回具有 0 或 1 权限的帖子
- 如果用户是联系人(自动订阅),则返回具有 0、1 或 2 权限值的帖子。
我知道语法不正确,但这是否是一个很好的方法?另外,我通常一次只处理一张桌子,所以我很困惑,我需要加入这三张桌子吗?
SELECT user_id,
*
FROM posts
WHERE privacy < IF (user_id IN(SELECT *
FROM contacts
WHERE user1_id = 'TestUser'
OR user2_id = 'TestUser'), 2,
IF (
user_id IN (SELECT subscribed_to_id
FROM subscriptions
WHERE subscriber_id = 'TestUser')
,
1, 0)
)
再说一次,我知道我还很遥远,但我想学习一些比我习惯的基本知识更复杂的 MySQL,所以如果有人能给我一些关于如何改进这个查询的建议,我一定会很感激!