Pregunta

necesito utilizar la clasificación natural con un resultado de MySQL, ya que actualmente ordena mis valores INT de la siguiente manera:

  • 1
  • 123
  • 1256
  • 22
  • 231

[etc.]

Mientras que lo necesitaría para ordenar como

  • 1
  • 22
  • 231
  • 1256

No conozco la función "natsort", pero no funciona para un resultado de la consulta MySQL. ¿Cómo puedo ordenar (naturalmente), ¿es posible hacer esto dentro de la consulta?

Gracias por la ayuda!

EDIT: Ejemplo consulta $result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");

No sabe con certeza si mi uso de DESC no es válida, pero no arroja un error por lo que debe estar bien. Por desgracia, parece cambiar a DESC ASC también tiene ningún efecto ...

¿Fue útil?

Solución

La consulta que has enviado no está clasificando por una expresión constante de cadena, en lugar de un nombre de columna o posición. Cualquiera de acentos abiertos de uso para citar, o para llevar las comillas:

SELECT * FROM forums ORDER BY `posts` DESC

o tal vez

SELECT * FROM forums ORDER BY posts DESC

explicaría por qué el cambio entre ASC y DESC no tiene ningún efecto.

respuesta inicial fue:

El orden de clasificación que describes sugiere los valores INT se están almacenando en realidad como un tipo de carácter (o tal vez convertidos a caracteres antes de la clasificación).

Compruebe si se está almacenando los datos en un tipo numérico o carácter. Si es posible utilizar un tipo numérico, entonces el orden natural será como sea necesario. Si no puede cambia el tipo de datos subyacente para ser INT, entonces usted puede hacer esto en su consulta (por ejemplo, usando Reparto ), probablemente a costa del rendimiento.

Otros consejos

Si los mensajes era una columna no INT, podría intentar esto:

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

También echar un vistazo a http://drupal.org/project/natsort . Este es un módulo de Drupal que puede ser utilizado para facilitar MySQL clasificación.

Esta pregunta tiene una respuesta para MySQL que he utilizado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top