Frage

ich brauche natürliche Sortierung mit einer MySQL-Ergebnis zu verwenden, da es zur Zeit meine INT Werte sortiert wie folgt:

  • 1
  • 123
  • 1256
  • 22
  • 231

[etc]

Während ich würde es brauchen, wie zu sortieren

  • 1
  • 22
  • 231
  • 1256

Ich weiß, die „natsort“ Funktion, aber es funktioniert nicht für ein MySQL-Abfrage-Ergebnis arbeiten. Wie kann ich Art (natürlich), ist es möglich, dies in der Abfrage zu tun?

Danke für die Hilfe!

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

Nicht ganz sicher, ob meine Verwendung von DESC es gültig ist, aber es gibt keinen Fehler werfen, so dass es in Ordnung sein muss. Leider auch keine Wirkung, es scheint DESC ASC hat das Ändern ...

War es hilfreich?

Lösung

Die Abfrage, die Sie dort gebucht haben, ist durch einen konstanten String-Ausdruck Sortierung, anstatt ein Spaltennamen oder Position. Entweder verwenden Sie Backticks zu zitieren, oder die Zitate herausnehmen:

SELECT * FROM forums ORDER BY `posts` DESC

oder vielleicht

SELECT * FROM forums ORDER BY posts DESC

würde erklären, warum zwischen ASC ändern und DESC hat keine Auswirkungen.

Erste Antwort:

Die Sortierreihenfolge Sie beschreiben, schlägt die INT-Werte werden tatsächlich als Zeichentyp gespeichert (oder vielleicht auch zum Charakter umgewandelt vor dem Sortieren).

Überprüfen Sie, ob Sie die Daten in einem numerischen oder Zeichentyp werden zu speichern. Verwenden Sie möglichst ein numerischer Typ, dann wird die natürliche Sortierreihenfolge sein, wie Sie benötigen. Wenn Sie nicht , um den zugrunde liegenden Datentyp verändern INT sein, dann können Sie dies in Ihrer Anfrage tun (zB mit CAST ), wahrscheinlich auf Kosten der Leistung.

Andere Tipps

Wenn Beiträge eine nicht-INT-Säule war, könnte man dies versuchen:

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

Haben Sie auch einen Blick auf http://drupal.org/project/natsort . Dies ist ein Drupal-Modul, das verwendet werden kann, MySQL Sortierung zu erleichtern.

Diese Frage eine Antwort für MySQL hat, dass ich verwendet habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top