garotosopa

Ordem manual direto do banco

com um comentário

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 :)

Escrito por garotosopa

maio 10, 2010 às 1:36 pm

Publicado em MySQL, SQL

Uma resposta

Assinar os comentários com RSS.

  1. Interessante!
    Dessa(s) eu não sabia…

    Murilo Adriano

    julho 20, 2010 em 6:00 pm


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.