在MySQL查询

时间:2017-12-11 21:43:49

标签: 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 

1 个答案:

答案 0 :(得分:1)

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

根据您的查询,user可以有多个独立的管理员角色(u.n_admin, u.c_admin etc),那么您应该分别报告每个列。

由于每个都可以是真或假,我会使用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