Domanda

Ho bisogno di utilizzare l'ordinamento naturale con un risultato MySQL dal momento che attualmente ordina i miei valori INT come segue:

  • 1
  • 123
  • 1256
  • 22
  • 231

[etc]

Mentre io avrei bisogno di ordinare come

  • 1
  • 22
  • 231
  • 1256

Lo so della funzione "natsort", ma non funziona per un risultato della query MySQL. Come posso sort (naturalmente), è possibile farlo entro la query?

Grazie per l'aiuto!

EDIT: Esempio di query $result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");

Non del tutto sicuro se il mio uso di DESC non è valido, ma non genera un errore, quindi deve essere bene. Purtroppo, sembra che cambia DESC per ASC anche non ha alcun effetto ...

È stato utile?

Soluzione

La query che hai postato c'è l'ordinamento per un'espressione costante di stringa, piuttosto che un nome di colonna o posizione. Sia backticks uso per citare, o prendere le citazioni:

SELECT * FROM forums ORDER BY `posts` DESC

o forse

SELECT * FROM forums ORDER BY posts DESC

spiegherebbe perché il passaggio tra ASC e DESC non ha alcun effetto.

risposta iniziale è stata:

L'ordinamento si descrive suggerisce i valori INT vengono effettivamente memorizzati come un tipo di carattere (o forse convertiti in carattere prima di smistamento).

Verificare se si archiviano i dati in un tipo numerico o un carattere. Se possibile, utilizzare un tipo numerico, quindi l'ordinamento naturale sarà come richiedete. Se può non di cambiare il tipo di dati sottostante per essere INT, allora si può fare questo nella vostra query (ad esempio utilizzando CAST ), probabilmente a scapito delle prestazioni.

Altri suggerimenti

Se i messaggi era una colonna non-INT, si potrebbe provare questo:

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

Anche dare un'occhiata al http://drupal.org/project/natsort . Questo è un modulo Drupal che può essere utilizzato per facilitare l'ordinamento MySQL.

Questa domanda ha una risposta per MySQL che ho usato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top