Pergunta

Eu tenho uma aplicação PHP que exibe uma lista de opções para um usuário. A lista é gerada a partir de uma consulta simples contra SQL 2000. O que eu gostaria de fazer é ter uma opção específica no topo da lista, e depois ter as opções restantes classificados em ordem alfabética.

Por exemplo, aqui estão as opções se classificados em ordem alfabética:

Calgary  
Edmonton  
Halifax  
Montreal  
Toronto  

O que eu gostaria que a lista a ser é mais parecido com isto:

**Montreal**  
Calgary  
Edmonton  
Halifax  
Toronto  

Existe uma maneira que eu posso fazer isso usando uma única consulta? Ou eu estou preso executar a consulta duas vezes e anexando os resultados?

Foi útil?

Solução

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

Outras dicas

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

Nota:. Isso funciona com o MySQL, não SQL 2000 como o OP solicitado

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

select   Name
from     Places
order by Priority desc,
         Name

Eu tive um problema semelhante em um site que eu construí cheia de relatos de casos. Eu queria que os relatos de casos em que o nome vítima é conhecida para ordenar ao topo, porque eles são mais convincentes. Por outro lado eu queria todos os casos John Doe para estar no fundo. Como os nomes das pessoas este também envolvidos, eu tive o problema firstname / sobrenome de classificação também. Eu não queria dividi-lo em dois campos de nomes porque alguns casos não são pessoas de todo.

A minha solução:

Eu tenho um campo "Nome", que é o que é exibido. Eu também tenho um campo "NameSorted" que é usado em todas as consultas, mas nunca é exibido. Minha entrada UI se encarrega de converter "LAST, em primeiro lugar" inserido no campo de classificação para a versão de exibição automaticamente.

Finalmente, a "plataforma" a classificação I simplesmente colocar caracteres apropriados no início do campo de classificação. Desde que eu quero coisas para sair no final, eu coloquei "zzz" no início. Para classificar no topo você poderia colocar "!" no inicio. Novamente sua edição UI pode cuidar do presente para você.

Sim, eu admito a sua cheezy um pouco, mas funciona. Uma vantagem para mim é que tenho de fazer consultas mais complexas com junta em lugares diferentes para gerar páginas contra RSS etc, e eu não tenho que manter lembrando uma expressão complexa para obter o direito de classificação, é sempre apenas uma espécie pelo "NameSorted "campo.

Clique meu perfil para ver o website resultante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top