我有一张球员桌。每个球员都有一个位置,无论是守门员、后卫、中场还是前锋。我想让所有球员回归,先有前锋,然后是中场,然后是后卫,然后是守门员。显然,如果我这样做了:
SELECT *
FROM 'Player'
ORDER BY position
防守者将首先被遣返..。
发布于 2013-09-20 23:06:15
使用SET()
SELECT *
FROM Player
ORDER BY find_in_set(position,'forward,midfielder,defender,goalkeeper')
发布于 2013-09-20 23:19:19
无论是-
FIELD()
作为由@Bohemian建议,但是请注意,对于较大的表,这不会很好地扩展(因为必须对每个记录的计算函数结果执行文件短)。position
成为一个ENUM
:
改变表球员的位置ENUM(‘前锋’,‘中场’,‘后卫’,‘守门员’);
然后,将相应地对现有查询的结果进行排序:
按位置从玩家订单中选择*;
这是因为,正如在类型中所描述的:
分选
ENUM
值根据其索引编号进行排序,这取决于列规范中列出枚举成员的顺序。priority
列进行排序,可以对查询结果进行排序:
选择*从玩家加入position_order使用(位置)顺序按优先级;请注意,在决定采用哪种方法之前,您可能希望阅读Chris的文章MySQL的ENUM数据类型是邪恶的8个原因。
发布于 2013-09-20 23:09:11
使用FIELD()
SELECT *
FROM Player
ORDER BY FIELD(position,'forward', 'midfielder', 'defender', 'goalkeeper')
https://stackoverflow.com/questions/18927093
复制相似问题