SQLite и индивидуальный заказ - PullRequest
37 голосов
/ 22 июля 2010

У меня есть таблица с категориями:

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

Теперь я бы хотел упорядочить результат оператора select до

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

например. В MySQL это можно сделать так:

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

Как бы вы сделали это в SQLite? У меня нет поля "order by".

Ответы [ 3 ]

69 голосов
/ 22 июля 2010
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
2 голосов
/ 18 ноября 2017

Второй способ сделать это (первый с CASE WHEN ... THEN END, как уже было сказано в других ответах):

ORDER BY ID=4 DESC,
         ID=3 DESC,
         ID=1 DESC,
         ID=5 DESC,
         ID=6 DESC
1 голос
/ 22 июля 2010

У меня нет поля "Order by"

Почему бы и нет?

Если это потому, что порядок сортировки является отдельным приложением, выполните сортировку в приложении, а не в базе данных.

Если это потому, что порядок сортировки специфичен только для этого запроса, закодируйте его в запросе. ОДНАКО я настоятельно рекомендую сделать это прозрачным для вызывающего приложения, например (Стандартный синтаксис SQL):

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;

Если порядок сортировки используется несколькими запросами и / или приложениями, добавьте его в столбец таблицы в базе данных, а затем используйте этот столбец в запросе.

...