2010-08-03 9 views
1

Dites que j'ai une requête "select * from clauses où id dans (0,2,5,1,3)" et je veux réellement les lignes retournées dans le même ordre qu'ils sont spécifiés la clause where. L'ordre des ID changera d'une requête à l'autre et il n'y a pas de modèle dans la commande. Je sais qu'il est possible de modifier le code data model, create temp tables, etc. Mais croyez-moi que ces types de solutions ne fonctionneront pas dans ma situation. Je suis également incapable de modifier l'ordre des objets de résultat dans mon code d'application.Ordre de tri SQL par l'ordre spécifié dans la requête

Je suis également conscient que les différents moteurs de base de données trient les choses différemment, il n'y a aucune garantie dans certaines situations bla bla bla. Je veux juste non, est-ce possible?

Je vais utiliser MySQL ou SQL Server si cela aide :)

+0

est-ce que cela a à faire dans la requête, ou peut tout appelle la requête le faire? – AllenG

Répondre

6

sur MySQL, vous pouvez utiliser FIND_IN_SET:

ORDER BY FIND_IN_SET(id, '0,2,5,1,3') 

les plus moyens portables de commande serait d'utiliser une expression CASE :

ORDER BY CASE id 
      WHEN 0 THEN 1 
      WHEN 2 THEN 2 
      WHEN 5 THEN 3 
      WHEN 1 THEN 4 
      WHEN 3 THEN 5 
     END 
+0

Oui, construire cette déclaration de cas sera difficile, mais je ne vois pas un moyen de sortir de celui-ci :( – oreoshake

5
Select .. 
From Clauses 
Where Id In(0,2,5,1,3) 
Order By Case Id 
       When 0 Then 1 
       When 2 Then 2 
       When 5 Then 3 
       When 1 Then 4 
       When 3 Then 5 
       ... 
       End