2010-10-05 43 views
0

爲了我有一臺這樣的數據:MySQL的 - 查詢結果中的「某些模式」

id name  field 
0 marco  attack 
1 andrea  defense 
2 luca  medium 
3 ernesto  defense 
4 vittorio medium 
5 manuele  attack 

我需要訂購的領域。但是,優先級列表順序(對於我的例子)應該是防禦中等攻擊。

所以它必須返回:

安德烈·埃內斯托·盧卡,維托裏奧,馬可,manuele。

怎麼辦? bye

回答

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 
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