Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) order by capitulos


imgcom

Pergunta

Galera,

Estou precisando ordenar capitulos no banco mas estou encontrando um problema. Criei um campo DECIMAL e tudo bem, funcionou até a ordenação do capitulo 1.1 porém eu preciso de um item 1.1.1, daí não rola mais com DECIMAL

Resolvi então usar um campo varchar e transformar tudo em um binário, usando INET_ATON e até ordenou, mas logicamente o 10 ficará atrás de 1.1.1 pois o seu binário é menor.

Agora estou nessa luta, alguém tem alguma solução pra isso?

Não posso ordenar de outras maneiras, teria que ser com base no capitulo mesmo, tipo 1, 1.1, 1.1.1, 2, 2.1.1, etc

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

imgcom, eu pensei em um jeito meio gambiarra.

crie três campos com um int do nível do índice.

1 | 0 | 0 | Pai

1 | 1 | 0 | Filho

1 | 2 | 0 | Filho 2

1 | 1 | 1 | Neto

1 | 1 | 2 | Neto 2

No SELECT você ordena:

ORDER BY pai ASC, filho ASC, neto ASC

Não sei se funciona :)

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, imgcom,

Eu tenho um sistema semelhante em um cliente. Ele controla o nivel de acesso ao sistema dele.

Dividido em até 4 subníveis com cada um variando de 0 a 999, funciona assim:

O seu capítulo 1 fica assim 001000000000000

O 1.1 = 001001000000

O 1.1.1 = 001001001000

O 1.1.1.1 = 001001001001 Este é o último nível.

Como todos são precedidos de zero, não há problema de ordenação.

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu a ajuda galera,

Mas nas duas maneiras citadas acima ficou muito trabalhoso, dei uma pesquisada no site do mylsq e consegui uma função nativa que resolveu o meu problema.

Gravei o capitulo como VARCHAR no banco e meu sql ficou assim:

SELECT campos FROM tabela ORDER BY CHAR(capitulos)

Pra quem precisar aí vai a referência:

CHAR(N,...)

CHAR() interpreta os argumentos como inteiros e retorna uma string com caracteres dados pelo valor do código ASCII referentes a estes inteiros. Valores NULL são desconsiderados:

mysql> SELECT CHAR(77,121,83,81,'76');

-> 'MySQL'

mysql> SELECT CHAR(77,77.3,'77.3');

-> 'MMM'

Editado por imgcom
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...