Natürliche Sortierung von MySQL Datenbank Resultset

  • #1
M

Michael_B

Bekanntes Mitglied
Themenersteller
Dabei seit
21.09.2002
Beiträge
860
Reaktionspunkte
0
Ort
Köln
Morgääähn,

ich hab da ein Problem mit meiner DB. Wie kann ich es bewerkstelligen, dass das Resultset, also die Daten, die ich aus einer Tabelle raussuche, in natürlicher Order abgegeben werden, also so dass 1 vor 10 kommt?
Ich hoffe ich hab mich verständlich ausgedrückt.

Wäre schön, wenn das ohne großartige Umwege funktionieren könnte. Stelle mir das so vor, dass ich ein weiteres Flag hinter die Order-Anweisung setze, wie z. B. ORDER BY name DESC NAT oder sowas.

Thx 4 Response

Edit:
Die Spalte, nach der sortiert werden soll, ist natürlich ein VARCHAR, kein INT oder dergleichen.
 
  • #2
Hi

Gefunden bei mysql.com :

If you are trying to sort a field of numbers and
you find it coming out like this:

1
10
11
12
2
3
4

the reason is that the field type is not of the
INT variety, therefore it is ordering the
information as though it were a string. A quick
fix for this (though it is probably best to
change the field type to INT) is to force MySQL
to treat the string as a number by putting 0+
infront of the field name in the ORDER BY clause.

ie: SELECT month FROM searchlog ORDER BY 0+month;

Gruß, Michael
 
  • #3
Danke, das war auf jeden Fall schonmal ein sehr geiler Tipp. Leider funkt das trotzdem nicht immer. Meistens, aber eben nicht immer. Als Beispiel hier mal folgendes Ergebnis:

IL-2 Secretion Assay
IL-2 Secretion Assay
IL-4 Secretion Assay
IL-4 Secretion Assay
IL-10 Secretion Assay
IL-10 Secretion Assay
IL-2 Secretion Assay
IL-5 Secretion Assay
IL-5 Secretion Assay
IL-5 Secretion Assay

Habe bereits in der DB nachgeguckt, ob bei den Einträgen vielleicht irgendwas anders ist, als bei den Einträgen, wo diese Sortierung auch richtig funktioniert. Hast du vielleicht ne Idee, woran das liegen könnte?
 
  • #4
Hi

In dem Fall lass doch einfach die ersten 3 Buchstaben abschneiden und dann danach sortieren.
Oder falls sich vorne die Buchstaben auch ändern sollten, mach zwei Kriterien, das erste die Buchstaben vorne, das zweite die Zahlen dahinter.

Gruß, Michael
 
  • #5
In diesem speziellen Fall wäre das natürlich angebracht, aber das war ja auch nur ein Beispiel... Das passiert auch bei anderen Produkten aus der DB. und da kann ich nicht einfach die ersten 3 zeichen abschnibbeln, weil die für die Sortierung relevanten Zahlen nicht immer ab der 4. Stelle stehen.
 
  • #6
Hi

Dann wirst du wohl um eine eigene Sortierfunktion nicht herumkommen, die nachträglich deine Daten sortiert.

Algorithmus: Quicksort
Den Vergleich zweier Elemente müsste man dann anpassen.

Gruß, Michael
 
  • #7
Danke... das habe ich mir auch schon so gedacht. Schade eigentlich...
Naja, vielleicht reicht es dem Webmaster ja so...

Für mich erledigt.
 
  • #8
IL-2 Secretion Assay
IL-2 Secretion Assay
IL-10 Secretion Assay
IL-10 Secretion Assay

eine Idee die ich vorschlage ist das du dir wenn es nur die eine stelle mit zahlen gibt, die zahlen definition rausholst (regexp), und danach sortiertst,
oder soll text auch immer nach mitsortiert werden weil auch buchstaben sortiert werden sollen?
dann wird kompliziert auch da hilft vielleicht meine idee weiter.
 
Thema:

Natürliche Sortierung von MySQL Datenbank Resultset

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben