我的表格中有一个名为 role 的列,其值如下:
Scientific staff
PostDocs
Supporting staff
PNUT
Visiting researchers
Secretary
Ph.D. students
Students
Other
我想以{strong>科学人员排在第一位的方式使用ORDER BY
。在我进行这样的查询时, Ph.D的字段。学生将首先返回(因为目前数据库中的行没有包含其他的字段)。有没有办法只使用mysql
来实现这一点,还是应该手动修改返回的值?如果是的话,你能告诉我怎么样吗?
SELECT * FROM members ORDER BY role
答案 0 :(得分:2)
正如目前所实施的那样,你不能以科学人员为先的方式进行排序,因为做奥得河按照相关项目的顺序对其进行排序(在你的情况下,按字母顺序排列,按角色出现) )。击>
现在,对此的简单解决方案是构建一个包含其中值的排序优先级表,分配数字优先级,然后按优先级排序。让我解释一下,因为它可能令人困惑:
您创建第二个表,列出其中的每个角色,并在第二列中为这些角色提供将显示的优先级。
表: 角色|优先
科学人员| 1
博士生| 2
其他| 3 (等)
然后你可以做这样的事情(伪MySQL):
select members.role from members
inner join priority
on members.role = priority.role
order by priority.priority
将为您提供members表中的role字段,该字段按您在优先级表上设置的优先级排序。由于它是内部联接,任何没有角色的人都不会显示。
答案 1 :(得分: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