我有表posts
和users
基本上我想查询posts
表的privacy
列是否为0
,这意味着post是public
,我想向大家展示这一点。但如果privacy
列是1,2,3,4
,这意味着这篇文章只适用于ID为1, 2, 3 and 4
这不是一个条件问题,它是一个sql连接通过表关联问题。
您需要创建一个连接表,将一个帖子关联到一个用户。然后,您可以使用连接来根据分配给用户的帖子来选择帖子。
SQL可能看起来像这样
选择分配给用户ID = 4的帖子
SELECT * FROM `posts`
LEFT JOIN `posts_users` ON (`posts`.`id` = `posts_users`.`post_id`)
WHERE `posts_users`.`user_id` = 4;
您还假设,如果一个帖子没有用户分配给它,那么它就是一个公共帖子。这需要检查NULL关联。
SELECT * FROM `posts`
LEFT JOIN `posts_users` ON (`posts`.`id` = `posts_users`.`post_id`)
WHERE `posts_users`.`user_id` IS NULL;
如果您想同时查找公共和关联的帖子,那么您可以使用逻辑或来匹配这两个规则。
SELECT * FROM `posts`
LEFT JOIN `posts_users` ON (`posts`.`id` = `posts_users`.`post_id`)
WHERE `posts_users`.`user_id` = 4
OR `posts_users`.`user_id` IS NULL;