[firebase-br] Ordenação gerando resultados diferentes
Alexandre Kogut
kogut em kogumelo.com.br
Seg Dez 25 14:35:59 -03 2006
Caríssimos:
Hoje me deparei com um problema estranho, e repasso apenas para saber se é assim mesmo, pois já arrumei uma solução.
Imaginem, num exemplo simplicado, uma tabela TURMA com os campos CÓDIGO, SALA e ATIVA, não importa muito o formato de cada um, apenas que CÓDIGO é a primary key - os demais campos permitem repetição
CODIGO SALA ATIVA
1 1 1
2 1 1
3 1 1
4 1 0
5 2 1
6 2 0
7 1 0
8 1 1
9 2 1
10 1 0
Se eu faço: SELECT CODIGO,SALA FROM TURMA ORDER BY SALA, o resultado será:
CODIGO SALA
1 1
2 1
3 1
4 1
7 1
8 1
10 1
5 2
6 2
9 2
Mas se eu apenas acrescento o campo ATIVA no select e faço: SELECT CODIGO, SALA, ATIVA FROM TURMA ORDER BY SALA, o resultado muda para:
CODIGO SALA ATIVA
4 1 0
7 1 0
10 1 0
1 1 1
2 1 1
3 1 0
8 1 1
6 2 0
5 2 1
9 2 1
Pelo fato de o campo SALA permitir valores repetidos, eu já esperava que a ordem no resultado do SELECT pudesse variar em função da quantidade de registros a ser ordenada, e isso estaria ok pra mim, mas nunca poderia imaginar que a ordem também seria influenciada pela quantidade de colunas do SELECT! Se eu quiser saber em que posição do select foi apresentado o código 7, no primeiro caso a resposta seria Linha 5 e no segundo Linha 2.
Para garantir a ordem, a solução foi acrescentar CODIGO na cláusula ORDER BY. Desta forma:
SELECT CODIGO, SALA FROM TURMA ORDER BY SALA,CODIGO
SELECT CODIGO, SALA,ATIVA FROM TURMA ORDER BY SALA,CODIGO
retornará sempre na mesma ordem.
Abraço a todos heróicos membros dessa lista, com votos de Sucesso em 2007.
Alexandre Kogut
Kogumelo Informática Ltda
(21) 2255-4417
Mais detalhes sobre a lista de discussão lista