Если нужно отсортировать список по определённому порядку, например список чисел с начала 4,5,1 и далее по возрастающей, то можно создать правило сортировки например с параметром условия с дополнительными колонками для сортировки:
SELECT id, -- дополнительные колонки для сортировки IF(id=4, 1, 0) c1, IF(id=5, 1, 0) c2, IF(id=1, 1, 0) c3 FROM test WHERE id IN(1,2,3,4,5,6,7,8,9,10) -- теперь сортируем по дополнительным колонкам по убывающей и далее по возрастающей ORDER BY c1 DESC, c2 DESC, c3 DESC, id ASC
Ответ запроса:
id c1 c2 c3 4 1 0 0 5 0 1 0 1 0 0 1 6 0 0 0 7 0 0 0 8 0 0 0 9 0 0 0 10 0 0 0
В этом варианте условие возвращает 1 или 0, так как по возрастающей сортировке 0 выше 1 поэтому делаем обратную сортировку по убывающей, тогда значения в дополнительных колонках будут первыми. В MySQL операторы можно использовать и сразу в сортировке, тогда запрос изменяется так:
SELECT id FROM test WHERE id IN(1,2,3,4,5,6,7,8,9,10) -- сортируем по условиям ORDER BY IF(id=4, 1, 0) DESC, IF(id=5, 1, 0) DESC, IF(id=1, 1, 0) DESC, id ASC
Ответ запроса:
id 4 5 1 6 7 8 9 10
Так как операторы условий возвращают 0 или 1, то их можно сократить сравниванием, тогда запрос будет такой:
SELECT id FROM test WHERE id IN(1,2,3,4,5,6,7,8,9,10) -- сортируем по сравниваниям ORDER BY id=4 DESC, id=5 DESC, id=1 DESC, id ASC
Ответ запроса такой же:
id 4 5 1 6 7 8 9 10
Вместо оператора условия можно использовать например CASE:
SELECT id FROM test WHERE id IN(1,2,3,4,5,6,7,8,9,10) ORDER BY -- сортируем по выбору CASE id WHEN 4 THEN 1 WHEN 5 THEN 2 WHEN 1 THEN 3 ELSE 4 END ASC
Ответ запроса такой же:
id 4 5 1 6 7 8 9 10