对文本列使用自定义优先级进行排序


12

这是一个示例表:

name | cat
----------
hugo | sal
bob  | mgr
mike | dev
jeff | mgr
john | dev

这两个namecat是VARCHAR。

cat 反映了这些名称的类别,但我想为其分配优先级,然后执行查询以列出所有名称,并以此优先级排序。

有什么可能的方法?我可以提取cat到第二个表,建立外键等,但考虑到我的应用程序是非常简单的结构可能是不可更改的:准备做什么,我必须列出的mgr名字,其次是dev名称,其次是sal名称?

Answers:


20

假设您无法更改结构,则可以在ORDER BY中使用CASE语句:

ORDER BY case cat when 'mgr' then 1 when 'dev' then 2 else 3

但是,如果可以更改结构,则可以创建一个Category包含类别代码和排名的表,将示例表加入该Category表并按此排名进行排序。


3
ORDER BY (case when `cat` = 'mgr' then 1 
when `cat` = 'dev' then 2 
else 3 end)

这种结构在Wordpress中对我有帮助。例如,先选择自定义帖子,然后再选择:发帖人和项目是自定义SELECT post_typeFROM wp_postsORDER BY(案例post_type='poster',然后1当post_type='project',然后2,否则3结尾)


注意:a)方括号是可选的:case 表达式(被称为)在可以指定列的任何地方都有效;和b)表达式可以稍微简化为case `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin't Hart 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.