Сортировка с одним вариантом принудительно в верхней части списка - PullRequest
4 голосов
/ 17 сентября 2008

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

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

Calgary  
Edmonton  
Halifax  
Montreal  
Toronto  

То, что я хотел бы, чтобы список был больше похож на это:

**Montreal**  
Calgary  
Edmonton  
Halifax  
Toronto  

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

Ответы [ 4 ]

6 голосов
/ 17 сентября 2008
SELECT name
FROM locations
ORDER BY
    CASE
        WHEN name = 'Montreal' 
        THEN 0
        ELSE 1
    END, name
4 голосов
/ 17 сентября 2008
SELECT name FROM options ORDER BY name = "Montreal", name;

Примечание: это работает с MySQL, а не с SQL 2000, как запрошенный OP.

0 голосов
/ 17 сентября 2008

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

Мое решение:

У меня есть поле "Имя", которое отображается. У меня также есть поле «NameSorted», которое используется во всех запросах, но никогда не отображается. Мой входной интерфейс обеспечивает автоматическое преобразование «LAST, FIRST», введенного в поле сортировки, в версию дисплея.

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

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

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

0 голосов
/ 17 сентября 2008
create table Places (
    add Name varchar(30),
    add Priority bit
)

select   Name
from     Places
order by Priority desc,
         Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...