首页 > 解决方案 > MySQL - 在 SELECT 语句中分配新名称并按新名称排序

问题描述

我有一个具有基本结构的表:

id | first_name | last_name | role_id 

role_id是 int 类型,用户可以添加新角色。我需要按角色名称排序,而不是按角色 ID,但我想避免加入。有没有办法制作SELECT 语句,我可以做这样的事情:

 SELECT users.*, (
    if(role_id = 1, roleName), 
    if(role_id = 2, roleName2),
    if(role_id = 3, roleName3))
    AS roleName )
ORDER BY roleName DESC

标签: mysql

解决方案


使用CASE表达式:

 SELECT *, 
    CASE role_id
      WHEN 1 THEN 'roleName1'
      WHEN 2 THEN 'roleName2'
      WHEN 3 THEN 'roleName3'
    END AS roleName
FROM users
ORDER BY roleName DESC

或者,如果role_ids 是从 1 到 n 的整数,则使用ELT()函数:

SELECT *, ELT(role_id, 'roleName1', 'roleName2', 'roleName3') AS roleName
FROM users
ORDER BY roleName DESC

推荐阅读