Сортировка с принудительным размещением одного параметра в начале списка
Вопрос
У меня есть PHP-приложение, которое отображает список опций для пользователя.Список генерируется на основе простого запроса к SQL 2000.Что я хотел бы сделать, так это разместить определенный параметр в верхней части списка, а затем отсортировать остальные параметры в алфавитном порядке.
Например, вот параметры, если они отсортированы в алфавитном порядке:
Calgary
Edmonton
Halifax
Montreal
Toronto
Я бы хотел, чтобы список был больше похож на этот:
**Montreal**
Calgary
Edmonton
Halifax
Toronto
Есть ли способ, которым я могу сделать это, используя один запрос?Или я застрял, выполнив запрос дважды и добавив результаты?
Решение
SELECT name
FROM locations
ORDER BY
CASE
WHEN name = 'Montreal'
THEN 0
ELSE 1
END, name
Другие советы
SELECT name FROM options ORDER BY name = "Montreal", name;
Примечание:Это работает с MySQL, а не с SQL 2000, как запрошено OP.
create table Places (
add Name varchar(30),
add Priority bit
)
select Name
from Places
order by Priority desc,
Name
У меня была похожая проблема на веб-сайте, который я создал, полном отчетов о случаях.Я хотел, чтобы отчеты о делах, в которых известно имя жертвы, располагались вверху, потому что они более убедительны.И наоборот, я хотел, чтобы все дела Джона Доу были в самом низу.Поскольку это также касалось имен людей, у меня также была проблема с сортировкой имени / фамилии.Я не хотел разделять его на два поля имен, потому что в некоторых случаях это вообще не люди.
Мое решение:
У меня есть поле "Имя", которое и отображается.У меня также есть поле "NameSorted", которое используется во всех запросах, но никогда не отображается.Мой пользовательский интерфейс ввода автоматически преобразует "ПОСЛЕДНИЙ, ПЕРВЫЙ", введенные в поле сортировки, в отображаемую версию.
Наконец, чтобы "подстроить" сортировку, я просто помещаю соответствующие символы в начало поля сортировки.Поскольку я хочу, чтобы материал вышел в конце, я ставлю "zzz" в начале.Для сортировки вверху вы могли бы поставить "!" в начале.Опять же, ваш пользовательский интерфейс редактирования может позаботиться об этом за вас.
Да, я признаю, что это немного дерьмово, но это работает.Одним из преимуществ для меня является то, что мне приходится выполнять более сложные запросы с объединениями в разных местах для генерации страниц по сравнению с RSS и т.д., и мне не нужно постоянно запоминать сложное выражение, чтобы выполнить правильную сортировку, оно всегда просто сортируется по полю "NameSorted".
Нажмите "Мой профиль", чтобы просмотреть результирующий веб-сайт.