Question SQLite et commande personnalisée par


J'ai un tableau avec des catégories:

ID  Category
"1","Baking"   
"3","Family"   
"4","Entertaining"   
"5","Children"   
"6","Desserts"   

Maintenant, je voudrais commander le résultat de l'instruction select à

ID  Category
"4","Entertaining"   
"3","Family"  
"1","Baking"   
"5","Children"   
"6","Desserts"  

par exemple. En MySQL, vous le feriez comme ceci:

SELECT * FROM CATEGORIES ORDER BY FIELD (ID, 4,3,1,5,6);

Comment le feriez-vous dans SQLite? Je n'ai pas de champ "order by".


33
2017-07-21 21:03


origine


Réponses:


ORDER BY 
  CASE ID
    WHEN 4 THEN 0
    WHEN 3 THEN 1
    WHEN 1 THEN 2
    WHEN 5 THEN 3
    WHEN 6 THEN 4
  END

62
2017-07-21 21:06



Je n'ai pas de champ "order by"

Pourquoi pas?

Si c'est parce que l'ordre de tri est propre à l'application, faites le tri dans l'application plutôt que dans la base de données.

Si c'est parce que l'ordre de tri est spécifique à cette seule requête, encodez-le dans la requête. Cependant, je vous suggère fortement de rendre cela transparent à l'application appelante, par ex. (Syntaxe SQL standard):

SELECT T2.ID, T2.Category, 
       T2.query_name_here_sort_order
  FROM (
        SELECT T1.ID, T1.Category, 
               CASE ID
                  WHEN 4 THEN 1
                  WHEN 3 THEN 2
                  WHEN 1 THEN 3
                  WHEN 5 THEN 4
                  WHEN 6 THEN 5
               END AS query_name_here_sort_order
          FROM CATEGORIES AS T1
       ) AS T2 (
                ID, Category, 
                query_name_here_sort_order
               )
 ORDER 
    BY query_name_here_sort_order;

Si l'ordre de tri est utilisé par plusieurs requêtes et / ou applications, ajoutez-le à une colonne d'une table de la base de données, puis utilisez cette colonne dans votre requête.


1
2017-07-22 09:39



Une deuxième façon de le faire (le premier étant avec CASE WHEN ... THEN END comme déjà indiqué dans d'autres réponses) est:

ORDER BY ID=4 DESC,
         ID=3 DESC,
         ID=1 DESC,
         ID=5 DESC,
         ID=6 DESC

0
2017-11-18 17:17