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 ().
Спасибо,
Дэвид Кис