MySQL查询中多个条件的用例

MySQL查询中多个条件的用例,mysql,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_

下面是一个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\u admin、u.c\u admin等),因此您应该分别报告每一列

因为每一个都只能是真或假,所以我会使用
IF()
而不是
CASE()


在这个例子中,我不会使用
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