Сортировка с принудительным размещением одного параметра в начале списка

StackOverflow https://stackoverflow.com/questions/82929

  •  01-07-2019
  •  | 
  •  

Вопрос

У меня есть 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".

Нажмите "Мой профиль", чтобы просмотреть результирующий веб-сайт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top