Сортировка с одним параметром, который выводится наверх списка

У меня есть приложение PHP, которое отображает список параметров для пользователя. Список создается на основе простого запроса к SQL 2000. Я бы хотел, чтобы в верхней части списка была определенная опция, а оставшиеся опции были отсортированы в алфавитном порядке.

Например, вот варианты, отсортированные по алфавиту:

Calgary  
Edmonton  
Halifax  
Montreal  
Toronto  

Я бы хотел, чтобы список был примерно таким:

**Montreal**  
Calgary  
Edmonton  
Halifax  
Toronto  

Есть ли способ сделать это с помощью одного запроса? Или я застрял в запуске запроса дважды и добавляю результаты?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
0
1 333
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

SELECT name FROM options ORDER BY name = "Montreal", name;

Примечание. Это работает с MySQL, а не с SQL 2000, как запрашивается OP.

Я попытался использовать ваше решение, но оно вызвало синтаксическую ошибку SQL в значке = в заказе. Спасибо за идею.

Wally Lawless 17.09.2008 17:14

Ах да, я, должно быть, думал о синтаксисе MySQL: D

mercutio 17.09.2008 17:16

create table Places (
    add Name varchar(30),
    add Priority bit
)

select   Name
from     Places
order by Priority desc,
         Name
Ответ принят как подходящий

SELECT name
FROM locations
ORDER BY
    CASE
        WHEN name = 'Montreal' 
        THEN 0
        ELSE 1
    END, name

У меня была аналогичная проблема на веб-сайте, который я создал, полный отчетов о случаях. Я хотел, чтобы отчеты о случаях, в которых известно имя жертвы, располагались в самом верху, потому что они более убедительны. И наоборот, я хотел, чтобы все дела Джона Доу были внизу. Поскольку это также связано с именами людей, у меня также была проблема с сортировкой имени / фамилии. Я не хотел разбивать его на два поля имен, потому что в некоторых случаях вообще не люди.

Мое решение:

У меня есть поле «Имя», которое и отображается. У меня также есть поле «NameSorted», которое используется во всех запросах, но никогда не отображается. Мой пользовательский интерфейс ввода обеспечивает автоматическое преобразование «ПОСЛЕДНЕГО, ПЕРВОГО», введенного в поле сортировки, в отображаемую версию.

Наконец, чтобы «подстроить» сортировку, я просто помещаю соответствующие символы в начало поля сортировки. Так как я хочу, чтобы материал выходил в конце, я ставил "zzz" в начале. Для сортировки вверху можно поставить "!" в начале. Опять же, ваш интерфейс редактирования может позаботиться об этом за вас.

Да, я признаю, что это немного дрянно, но это работает. Одним из преимуществ для меня является то, что мне приходится выполнять более сложные запросы с объединениями в разных местах для создания страниц по сравнению с RSS и т. д., И мне не нужно постоянно запоминать сложное выражение, чтобы получить правильную сортировку, его всегда просто сортируют по "NameSorted " поле.

Щелкните мой профиль, чтобы увидеть получившийся веб-сайт.

Я закончил с этим

SELECT name
FROM locations
LEFT JOIN (VALUES ('Toronto', 1), ('Montreal', 2)) city (name, rank)
    ON locations.name = city.name
ORDER BY city.rank, locations.name;

Это может быть излишним для этого примера, но может быть расширено для более сложных нужд.

Другие вопросы по теме