Подтвердить что ты не робот

SQLite и пользовательский порядок

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

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? У меня нет поля "порядок".

4b9b3361

Ответ 1

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

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

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

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

Если это потому, что порядок сортировки специфичен только для этого одного запроса, тогда закодируйте его в запросе. ОДНАКО Я настоятельно рекомендую вам сделать это прозрачным для вызывающего приложения, например. (Стандартный синтаксис 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;

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

Ответ 3

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

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