Olá e obrigado por reservar um tempo para ler esta pergunta.
Estou usando o MySQL e quero classificar os resultados usando ORDER BY para uma coluna específica, mas os resultados devem ser ordenados de acordo com um critério específico para esta coluna. Por exemplo, para a tabela a seguir, desejo ORDER BY 'group'
, mostrando primeiro o 9,7,6 'group' items
e, no final 10,8,5 'group' items
:
names group
--------- ------
susanita 10
miguelito 5
mafalda 7
manolito 8
libertad 6
felipe 9
guille 8
desde já, obrigado.
Peguei seus dados de amostra, carreguei-os em uma tabela chamada mytable e os executei.
Aqui estão os resultados:
De uma chance !!!
ATUALIZAÇÃO 2011-09-06 12:33 EDT
Aqui está outra abordagem:
Isso forçará qualquer grupo diferente de 9,7,6,10,8,5 a aparecer na parte inferior da consulta.
ATUALIZAÇÃO 2011-09-06 14:39 EDT
Ei @Nick, o seu também funciona contra meus dados de amostra !!!
Use a função do MySQL
find_in_set()
para fazer isso. É mais conciso, mas menos portátil do que a abordagem CASE proposta pelo gbn.Por exemplo :
Como depende da pesquisa de strings,
find_in_set()
é útil principalmente para ordenar pequenos conjuntos de chaves facilmente pesquisáveis, como números inteiros.Normalmente (é solicitado diariamente no SO), você usaria um CASE que é SQL padrão
Eu estaria interessado em ver como isso se compara em um grande conjunto de dados com o método LOCATE(CONCAT...) de RolandoMySQLDBA
Para obter um exemplo mais complexo, consulte o erro 'Falha na conversão' com a expressão ORDER BY CASE
Você pode criá-lo como um tipo ENUM .
Portanto, crie o campo ENUM como
ENUM('9','7','6','10','8','5')
Isenção de responsabilidade: não endosso isso, porque suspeito que sua
group
coluna precise ser dinâmica. Estou apenas mencionando isso como uma opção.