MySQL предоставляет строчную функцию с именем FIELD(), которая принимает переменное количество аргументов. Возвращаемое значение - это местоположение первого аргумента в списке остальных. Другими словами:
FIELD('d', 'a', 'b', 'c', 'd', 'e', 'f')
будет возвращать 4, так как "d" является четвертым аргументом, следующим за первым.
Эта функция предоставляет возможность сортировать результаты запроса на основе очень специфического заказа. Для моего текущего приложения есть четыре статуса, которые мне нужно для менеджера: активные, одобренные, отклоненные и отправленные. Однако, если я просто закажу столбцом статуса, я считаю, что удобство использования результирующего списка уменьшается, поскольку отклоненные и активные статусные элементы более важны, чем представленные и одобренные.
В MySQL я мог бы сделать это:
SELECT <stuff> FROM <table> WHERE <conditions> ORDER BY FIELD(status, 'rejected', 'active','submitted', 'approved')
и результаты будут упорядочены так, чтобы сначала были отклоненные элементы, затем активные и т.д. Таким образом, результаты были упорядочены в снижении уровня важности для посетителя.
Я мог бы создать отдельную таблицу, которая перечисляет этот уровень важности для статусов, а затем заказывает запрос по убыванию, но это несколько раз появилось для меня с момента перехода на MS SQL Server, поэтому я подумал, что спросите, можно ли избежать дополнительной таблицы и несколько более сложных запросов, используя встроенную функцию, похожую на MySQL FIELD().
Спасибо,
Дэвид Кис