[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