Использование CASE для нескольких условий в запросе MySQL

0

Здесь запрос 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 ответ

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 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню