2010-10-26 8 views
1

J'espère qu'il ya une solution simple pour cela:MySQL ORDER BY [valeur du champ PARAM PERSO]

J'ai une table où chaque ligne a son propre (champ de type SET) statut. Statuses peuvent être:

  • déconnecté
  • disponible
  • occupé
  • la distance

Je voudrais commander comme suit

  • disponible
  • occupé
  • la distance
  • déconnecté

Je pensais que simple

ORDER BY `status` ASC 

fera l'affaire (par ordre alphabétique) mais il me donne ce qui suit:

  • déconnecté
  • disponible
  • occupé
  • la distance

Comment est ce genre de la manière la plus simple?

Merci à l'avance,

Fabrik

+0

Pourquoi le gros vote? (la raison ne s'applique pas aussi) – fabrik

+1

N'oubliez pas d'accepter la bonne réponse @fabrik;) – Cedric

Répondre

4

Je pensais que je voudrais ajouter une autre façon de commander des valeurs de champs personnalisés,

ORDER BY FIND_IN_SET(status, 'available,busy,distance,offline') 

(Si les chaînes données contiennent une citation simplement lui échapper)

-1

de Nevermind.

L'astuce consiste à enregistrer les valeurs SET dans le bon ordre.

8

Vous pouvez aussi faire quelque chose comme ça, si réordonner les SET valeurs peu pratique:

... ORDER BY CASE `status` 
       WHEN 'available' THEN 1 
       WHEN 'busy' THEN 2 
       WHEN 'distance' THEN 3 
       WHEN 'offline' THEN 4 
      END 
+1

C'est le moyen le plus simple que je puisse penser pour le faire.Une autre alternative serait de créer une table avec vos statuts qui a une colonne de commande et une jointure interne de cette table et ordonne les rangées par ordre spécifié pour chaque statut. – Webnet

-1

Plus simple que les solutions ci-dessus:

ORDER BY CONCAT(status)