首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql -按某些字符串排序

Mysql -按某些字符串排序
EN

Stack Overflow用户
提问于 2013-09-20 23:04:05
回答 4查看 2.1K关注 0票数 3

我有一张球员桌。每个球员都有一个位置,无论是守门员、后卫、中场还是前锋。我想让所有球员回归,先有前锋,然后是中场,然后是后卫,然后是守门员。显然,如果我这样做了:

代码语言:javascript
运行
复制
SELECT * 
FROM  'Player' 
ORDER BY position

防守者将首先被遣返..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-20 23:06:15

使用SET()

代码语言:javascript
运行
复制
SELECT * 
FROM Player 
ORDER BY find_in_set(position,'forward,midfielder,defender,goalkeeper')
票数 5
EN

Stack Overflow用户

发布于 2013-09-20 23:19:19

无论是-

  • 使用FIELD()作为由@Bohemian建议,但是请注意,对于较大的表,这不会很好地扩展(因为必须对每个记录的计算函数结果执行文件短)。
  • 使position成为一个ENUM: 改变表球员的位置ENUM(‘前锋’,‘中场’,‘后卫’,‘守门员’); 然后,将相应地对现有查询的结果进行排序: 按位置从玩家订单中选择*; 这是因为,正如在类型中所描述的: 分选 ENUM值根据其索引编号进行排序,这取决于列规范中列出枚举成员的顺序。
  • 制作一张桌子以保持位置顺序: 创建表position_order (位置VARCHAR(15)主键,优先级TINYINT未签名);插入到position_order (位置,优先级)值(‘前进’,1),(‘中场’,2),(‘后卫’,3),(‘守门员’,4);更改表球员添加外键(位置)引用position_order (位置); 然后,通过加入表并对新的priority列进行排序,可以对查询结果进行排序: 选择*从玩家加入position_order使用(位置)顺序按优先级;

请注意,在决定采用哪种方法之前,您可能希望阅读Chris的文章MySQL的ENUM数据类型是邪恶的8个原因

票数 3
EN

Stack Overflow用户

发布于 2013-09-20 23:09:11

使用FIELD()

代码语言:javascript
运行
复制
SELECT * 
FROM Player 
ORDER BY FIELD(position,'forward', 'midfielder', 'defender', 'goalkeeper')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18927093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档