Pergunta

Preciso usar a classificação natural com um resultado MySQL, pois atualmente classifica meus valores int da seguinte forma:

  • 1
  • 123
  • 1256
  • 22
  • 231

etc

Enquanto eu precisaria disso para classificar como

  • 1
  • 22
  • 231
  • 1256

Conheço a função "Natsort", mas não funciona para um resultado da consulta MySQL. Como posso classificar (naturalmente), é possível fazer isso dentro da consulta?

Obrigado pela ajuda!

Editar: Exemplo de consulta $result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");

Não tenho certeza se meu uso da DESC é válido, mas não lança um erro, por isso deve estar bem. Infelizmente, parece que mudar o DESC para ASC também não tem efeito ...

Foi útil?

Solução

A consulta que você postou é classificada por uma expressão constante de string, em vez de um nome ou posição da coluna. Use backsticks para citar ou retire as cotações:

SELECT * FROM forums ORDER BY `posts` DESC

ou talvez

SELECT * FROM forums ORDER BY posts DESC

Explicaria por que mudar entre ASC e DESC não tem efeito.

A resposta inicial foi:

A ordem de classificação que você descreve sugere que os valores int estão realmente sendo armazenados como um tipo de caractere (ou talvez convertidos em caracteres antes de classificar).

Verifique se você está armazenando os dados em um tipo numérico ou de caractere. Se possível, use um tipo numérico, a ordem de classificação natural será necessária. Se você não pode Altere o tipo de dados subjacente a ser int, então você pode fazer isso em sua consulta (por exemplo, usando ELENCO), provavelmente ao custo do desempenho.

Outras dicas

Se as postagens fossem uma coluna não-INT, você poderia tentar o seguinte:

SELECT * FROM forums ORDER BY CAST(`posts` AS INT) DESC

Também dê uma olhada em http://drupal.org/project/natsort. Este é um módulo Drupal que pode ser usado para facilitar a classificação MySQL.

Essa questão Tem uma resposta para o MySQL que eu usei.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top