Ответ 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
У меня есть таблица с категориями:
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
CASE ID
WHEN 4 THEN 0
WHEN 3 THEN 1
WHEN 1 THEN 2
WHEN 5 THEN 3
WHEN 6 THEN 4
END
У меня нет поля "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;
Если порядок сортировки используется несколькими запросами и/или приложениями, то добавьте его в столбец в таблице в базе данных, затем используйте этот столбец в своем запросе.
Второй способ сделать это (первый из них с CASE WHEN ... THEN END
, как уже было сказано в других ответах):
ORDER BY ID=4 DESC,
ID=3 DESC,
ID=1 DESC,
ID=5 DESC,
ID=6 DESC