Classificar com uma opção forçada ao topo da lista
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?
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.