【问题标题】:How to write IF ELSE statements in MySQL如何在 MySQL 中编写 IF ELSE 语句
【发布时间】:2014-06-27 13:27:09
【问题描述】:

我有表 posts 和 users

基本上我想查询posts 表的privacy 列是否为0,这意味着帖子是public,我想向大家展示。但如果privacy 列为1,2,3,4,则表示此帖子仅适用于ID 为1, 2, 3 and 4 的用户

【问题讨论】:

  • 您的查询结果应该是什么?
  • 您是否想说,您的隐私列中有逗号分隔值?这几乎不是一个好主意。
  • 你能用你的数据库架构和一些示例数据发布 sqlfiddle 吗?
  • 是的,它的逗号分隔值,你更喜欢哪种方式?我实际上并不擅长 SQL..
  • @user2765602 我会使用包含三列的联结表:user_id、post_id 和 privacy 左右。

标签: php mysql sql


【解决方案1】:

这不是条件问题,而是 sql join through table 关联问题。

您需要创建一个将帖子与用户相关联的连接表。然后,您可以使用联接根据分配给用户的帖子来选择帖子。

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;

如果您想同时查找公开帖子和相关帖子,则使用逻辑 OR 来匹配这两个规则。

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;

【讨论】:

  • 我想要查询结果,ID 在 PRIVACY 列或隐私列中的人的帖子为 0(公开),以便该人看到它。
  • posts_users 是定义post_id 和user_id 列的第三个数据表。对于拥有帖子的每个用户,都需要有一条记录来定义该关联。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2021-07-30
相关资源
最近更新 更多