2010-10-05 3 views
0

J'ai ces données sur une table:MySql - pour un résultat de requête dans « un certain mode »

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

je commander en champ. MAIS, l'ordre de la liste prioritaire (pour mon exemple) devrait être défense-medium-attack.

il doit retourner:

andrea, ernesto, luca, vittorio, marco, Manuele.

Comment le faire? bye

Répondre

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

Vous devez stocker les champs dans une table distincte et leur donner un ordre de tri. Ensuite, vous pouvez vous joindre à cette table.

En plus de vous permettre de trier efficacement, il rend également la structure de la table plus relationnelle - ce qui est bien.

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