mysql - 在 MySQL 查询中使用 CASE 进行多个条件查询

标签 mysql

这是一个 MySQL 查询,我用它来获取用户的角色以及评论。 但在某些情况下,一个用户可以是多种情况的管理员,在这种情况下,此查询不起作用。

这仅显示用户的第一个角色:管理员。

在这种情况下使用 case 的正确方法是什么?

   select u.fullname, c.comment,
     case when u.n_admin = 1 then 'n_admin'
          when u.c_admin = 1 then 'c_admin'
          when u.t_admin = 1 then 't_admin'
          when u.i_admin = 1 then 'i admin'
          end as role
     from  comments c
     left join users u on u.id = c.user_id 
     where c.id= 34 

最佳答案

正如 @Matt-Spinks 所说,您的查询将所有角色包装到一列中。

由于根据您的查询,用户可以拥有多个独立的管理员角色(u.n_admin、u.c_admin 等),因此您应该单独报告每一列。

由于每个只能是 true 或 false,所以我会使用 IF() 而不是 CASE():

SELECT u.fullname, c.comment,
     IF(u.n_admin = 1,'Yes','No') AS 'has n_admin role',
     IF(u.c_admin = 1,'Yes','No') AS 'has c_admin role',
     IF(u.t_admin = 1,'Yes','No') AS 'has t_admin role',
     IF(u.i_admin = 1,'Yes','No') AS 'has i_admin role'
     FROM  comments c
     LEFT JOIN users u on u.id = c.user_id 
     WHERE c.id= 34 

关于mysql - 在 MySQL 查询中使用 CASE 进行多个条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47761933/

相关文章:

php - 选择新图像时如何保存到数据库。如果没有,将旧照片保留在数据库中吗?

mysql - 有没有一种简单的方法可以在带有 MySQL 后端的 Access 中按表单查询?

mysql - 使用 MySQL 搜索和替换添加换行符

mysql - 使用 WHERE 子句对 MySQL 中多个连接表中的不同行进行计数

PHP - 当只调用一次execute()时,PDO查询执行两次

mysql - 添加触发器时表对数据库未知

MySql 显示表查询

php - mysql SUM 直到达到值

mysql返回两个最小值

php - 有没有用PHP维护MySQL表结构的库?