我在桌子上有这些数据:
id name field
0 marco attack
1 andrea defense
2 luca medium
3 ernesto defense
4 vittorio medium
5 manuele attack
我需要按字段排序。但是,优先级列表顺序(对于我的例子)应该是防御 - 中等攻击。
所以它必须返回:
andrea,ernesto,luca,vittorio,marco,manuele。
怎么办?再见
答案 0 :(得分:3)
您应该将字段存储在单独的表中,并为它们提供排序顺序。然后你可以加入那张桌子。
除了允许您有效排序外,它还使表结构更具关系性 - 这很好。
id field sort
1 defense 1
2 medium 2
3 attack 3
id name field
0 marco 3
1 andrea 1
2 luca 2
3 ernesto 1
4 vittorio 2
5 manuele 3
select p.name,
ps.field
from players p
join playersort ps
on p.field = ps.id
order by ps.sort
答案 1 :(得分:1)
SELECT
X.id,
X.name,
X.field
FROM (
SELECT id,
name,
field,
CASE field WHEN 'defense' THEN 1
WHEN 'medium' THEN 2
WHEN 'attack' THEN 3
END AS SortValue
FROM MyTable) AS X
ORDER BY X.SortValue