MySQL предоставляет строковую функцию с именем FIELD () , которая принимает переменное количество аргументов. Возвращаемое значение - это расположение первого аргумента в списке оставшихся. Другими словами:
FIELD('d', 'a', 'b', 'c', 'd', 'e', 'f')
вернет 4, поскольку «d» является четвертым аргументом, следующим за первым.
Эта функция обеспечивает возможность сортировки результатов запроса на основе очень определенного порядка. У моей текущей заявки есть четыре статуса, которыми я должен управлять: активный, одобренный, отклоненный и отправленный. Однако, если я просто заказываю по столбцу статуса, я чувствую, что удобство использования результирующего списка снижается, поскольку отклоненные и активные элементы статуса более важны, чем отправленные и одобренные.
В MySQL я мог бы сделать это:
SELECT FROM WHERE ORDER BY FIELD(status, 'rejected', 'active','submitted', 'approved')
и результаты будут упорядочены таким образом, чтобы первыми были отклоненные позиции, за ними следуют активные и так далее. Таким образом, результаты были упорядочены в порядке убывания уровней важности для посетителя.
Я мог бы создать отдельную таблицу, которая перечисляет этот уровень важности для статусов, а затем упорядочивать запросы по этому в порядке убывания, но это пришло мне на ум несколько раз после перехода на MS SQL Server, поэтому я подумал, что поинтересуюсь, могу ли я избежать дополнительной таблицы и несколько более сложных запросов, используя встроенную функцию, аналогичную MySQL FIELD ().
Благодарю ты,
Дэвид Кис
14
задан OMG Ponies 8 October 2010 в 16:25
поделиться
0 ответов
Другие вопросы по тегам: Похожие вопросы: