4

我有一个表,其中有一列名为角色,值如下:

Scientific staff
PostDocs
Supporting staff
PNUT
Visiting researchers
Secretary
Ph.D. students
Students
Other

我想以科学人员至上ORDER BY的方式使用。在我做这样的查询时,那些是博士的字段。学生将首先返回(嗯,因为目前数据库中的行中没有包含Other的字段)。有没有办法只使用或者我应该手动修改返回的值?如果是这样,你能告诉我怎么做吗?mysql

SELECT * FROM members ORDER BY role
4

2 回答 2

2

您可以在没有附加表和连接的情况下执行此操作,只需执行以下操作:

SELECT * FROM members 
ORDER BY
  CASE role
     WHEN 'Scientific staff' THEN 1
     WHEN 'PostDocs'         THEN 2
     WHEN 'Supporting staff' THEN 5
     WHEN 'PNUT'             THEN 6
     WHEN 'Visiting researchers' THEN 4
     WHEN 'Secretary'        THEN 3
     WHEN 'Ph.D. students'   THEN 8
     WHEN 'Students'         THEN 7
     WHEN 'Other'            THEN 9
     ELSE   10
  END
于 2013-08-07T21:13:15.213 回答
2

由于目前已实施,因此您不能以科学人员优先的方式进行排序,因为执行 Oder By 会按相关项目的顺序对其进行排序(在您的情况下,按角色按字母顺序显示)。

现在,解决这个问题的简单方法是构建一个包含这些值的排序优先级表,分配一个数字优先级,然后按优先级排序。让我更好地解释一下,因为它可能会令人困惑:

您制作了第二个表格,列出了这些角色中的每一个,并在第二列中为这些角色指定了显示它们的优先级。

表:角色 | 优先

科研人员 | 1

博士生 | 2

其他 | 3(等)

然后你可以做这样的事情(伪 MySQL):

 select members.role from members
 inner join priority
 on members.role = priority.role
 order by priority.priority

这将为您提供成员表中的角色字段,按您在优先级表中设置的优先级排序。由于是内连接,所以没有角色的任何人都不会显示。

于 2013-08-07T20:25:05.040 回答