Ordem manual direto do banco
Em determinadas consultas pode ser desejado ter os registros em ordem preestabelecida, então pra evitar fazer isso pelo código, segue uma dica rápida para ordenar manualmente com simples operadores no ORDER BY.
Ao listar todos os estados do país, é possível ter o Rio de Janeiro como primeiro registro e os demais em ordem alfabética da seguinte forma:
SELECT * FROM estados ORDER BY uf="RJ" DESC, estado+----+---------------------+----------------+--------------+
| uf | estado | capital | regiao |
+----+---------------------+----------------+--------------+
| RJ | Rio de Janeiro | Rio de Janeiro | Sudeste |
| AC | Acre | Rio Branco | Norte |
| AL | Alagoas | Maceió | Nordeste |
| AP | Amapá | Macapá | Norte |
| AM | Amazonas | Manaus | Norte |Observe que no ORDER BY foi utilizada a comparação da coluna uf com o texto RJ. Como o resultado desta operação é 1 para verdadeiro e 0 para falso e foi utilizada ordem decrescente, o Rio de Janeiro aparece no topo.
Também é possível ordenar todo um conjunto, como no caso de querer as regiões numa ordem específica:
SELECT * FROM estados
ORDER BY
FIELD(regiao, "Sudeste", "Sul", "Centro-Oeste", "Norte", "Nordeste"),
estado+----+---------------------+----------------+--------------+
| uf | estado | capital | regiao |
+----+---------------------+----------------+--------------+
| ES | Espírito Santo | Vitória | Sudeste |
| MG | Minas Gerais | Belo Horizonte | Sudeste |
| RJ | Rio de Janeiro | Rio de Janeiro | Sudeste |
| SP | São Paulo | São Paulo | Sudeste |
| PR | Paraná | Curitiba | Sul |
| RS | Rio Grande do Sul | Porto Alegre | Sul |
| SC | Santa Catarina | Florianópolis | Sul |
| GO | Goiás | Goiânia | Centro-Oeste |Neste caso foi utilizada a função FIELD do MySQL. Para cada regiao é retornada sua posição na lista, então para Sudeste retorna 1, para Sul retorna 2, e assim por diante. Caso alguma região tivesse ficado de fora, receberia o valor 0, daí nesse caso bastaria controlar com ASC ou DESC se as não especificadas devem aparecer antes ou depois das outras.
Claro que é menos custoso ordenar por uma coluna já processada, mas às vezes essa forma quebra um galhão :)

Interessante!
Dessa(s) eu não sabia…
Murilo Adriano
julho 20, 2010 em 6:00 pm