• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ruitalia

Ordenar query alfabéticamente e colocar uma palavra no final

8 mensagens neste tópico

Caros colegas,

Estou com um problema que não estou a conseguir resolver pelas vias normais (google search).

Assim, posto aqui a minha questão:

Tenho uma lista de categorias em Mysql e quero ordená-las alfabeticamente e no final colocar a que se chama "outros".

Tabela na BD:

id, nome

1 Pássaros

2 Cães

3 Outros

4 Gatos

5 Peixes

O que quero é colocar uma query assim (ordenada alfabeticamente com "outros" no final):

id, nome

2 Cães

4 Gatos

5 Peixes

1 Pássaros

3 Outros

Não estou mesmo a conseguir de forma nenhuma.... Alguma sugestão?

Abraços,

ruitalia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1 - adiciona à tua tabela uma coluna RANK (number)

2 - prenche essa coluna com valores 0 para todos os registos menos para o registo "Outros", nesse registo prenche com 1

id, nome,        rank

1  Pássaros,  0

2  Cães,        0

3  Outros,      1

4  Gatos,      0

5  Peixes,      0

3 - faz uma query assim:

SELECT id, nome
FROM categorias
ORDER BY rank, nome

e já está! :cheesygrin:

inté!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de mais obrigado, é sem dúvida uma boa solução!

Contudo, já tenho uma tabela com diversos registos e não é exequível colocar uma coluna rank à pata.

Há alguma forma de construir um rank automáticamente no query, testando a palavra "outros" (ex. se nome = "outros" rank = 1 else rank = 0) ?

Thanks!

Rui

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes fazer assim, por exemplo:

alter table categorias
add rank number default 0 not null;

update categorias
set rank = 1
where upper(nome) = 'OUTROS';

commit;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar o Union (Acho que o MySQL suporta isso)

E fazer algo do gereno

SELECT id, nome
FROM categorias
ORDER BY rank, nome

UNION ALL

SELECT -1, "Outros"
FROM DUAL

Basicamente estas a juntar os registos da tua tabela com a linha outros

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes fazer assim, por exemplo:

alter table categorias
add rank number default 0 not null;

update categorias
set rank = 1
where upper(nome) = 'OUTROS';

commit;

Boas,

MySQL nao tem um tipo de dados number :cheesygrin: exprimenta antes com "INT"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eia.. pois é.. mea culpa!! .. o código que escrevi é para Oracle.. portanto, pode e deve necessitar os devidos ajustes! :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já está a bombar!

Muito obrigado a todos pelas dicas.

RP

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora