2009-11-03 7 views
0

J'essaie de comprendre comment récupérer les informations de ma base de données dans l'ordre que je veux. Par exemple, j'ai les noms ci-dessous dans ma base de données:MYSQL union ou commande par?

Matt 
Jimmy 
Craig 
Jenny 
Sue 

Je veux les sortir dans cet ordre:

Sue 
Craig 
Jimmy 
Matt 
Jenny 

Comment puis-je faire cela en utilisant MYSQL?

+1

Ainsi est-il un algorithme que vous voulez utiliser ou est-ce juste au hasard et la base de données aura jamais d'autres noms que ceux-ci? – Cellfish

Répondre

1

Utilisation:

ORDER BY CASE t.name 
      WHEN 'Sue' THEN 1 
      WHEN 'Craig' THEN 2 
      WHEN 'Jimmy' THEN 3 
      WHEN 'Matt' THEN 4 
      WHEN 'Jenny' THEN 5 
      ELSE 6 
      END 

Il utilise une instruction CASE pour attribuer une valeur arbitraire en fonction de la valeur de la commande.

5

Bien sûr, vous pouvez le faire comme ça (si je comprends vos besoins correctement):

order by field(t.name, 'Jenny', 'Matt', 'Jimmy', 'Craig', 'Sue') desc 

EDIT:

En fait, si vous voulez traiter un cas générique avec plusieurs déjà Les valeurs connues de la colonne et le nombre de valeurs inconnues, le cas courant serait de faire apparaître les valeurs connues au début du jeu de résultats (dans l'ordre prédéfini) et le reste après eux. Pour cela, vous devez ajouter les valeurs prédéfinies dans l'ordre inverse à la liste d'arguments de la fonction field et rendre l'ordre décroissant.

De cette façon 'Sue' ira en premier (field renvoie 5), 'Craig' - deuxième (4 retournés) et ainsi de suite jusqu'à 'Jenny'. Pour les valeurs qui ne figurent pas dans la liste des arguments, field renvoie 0. Elles iront donc à la fin du jeu de résultats.

Référence: FIELD