Order By oder andere Lösung?

hawaiian

Mitglied
Hallo zusammen,

ein Feld meiner Datenbank enthält neben dem Verweis auf drei verschiedene Bilddateien, die mit den Buchstaben b, g und s beginnen, weitere Werte wie 4., 5., 6. usw. Mir ist es bisher nicht gelungen, die "Order By-Abfrage" so zu formulieren, dass die Datensätze in der Reihenfolge g - s - b - 4. - 5. - 6. usw. aufgelistet werden (also erst die Datensätze mit den Bilddateien, aber eben nicht in alphabetischer bzw. umgekehrter Reihenfolge und dann die Datensätze mit den Zahlenwerten).

Ursprüngliche Abfrage:
PHP:
...
ORDER BY
        jahrwm DESC,
        wm
LIMIT 0, 100";

Ich habe mir jetzt so beholfen, dass ich die Datenbank um ein zusätzliches Feld mit der Bezeichnung "rangfolge" erweitert habe und den Datensätzen die Nrn. 1, 2 usw. zugewiesen habe. Datensätze mit der Bilddatei g erhalten also die Ziffer 1, s die 2 ...

Mit der entsprechend modifizierten Abfrage
PHP:
...
ORDER BY
        jahrwm DESC,
        rangfolge
LIMIT 0, 100";

klappt das nun wie gewünscht. Mein Problem wäre damit eigentlich gelöst. Allerdings lässt mich der Wunsch nach einer (vielleicht auch einfacheren) Alternativlösung nicht los. Weiß jemand eine?

Viele Grüße
hawaiian
 
Für die Reihenfolge: Zuerst Alphabetisch, dann Zahlen:
Nun, mit REGEXP testen ob das erste Zeichen eine Zahl ist oder nicht. Jenachdem einen anderen Prefix setzen und dann sortieren.

Zahlen: b_[Text]
Rest: Zahlen: a_[Text]

SQL:
ORDER BY CONCAT(IF(myfield REGEXP ('^[0-9]'), 'b_', 'a_'), myfield )

Die Reihenfolge g - s - b: Ist die fix? Immer diese Buchstaben in dieser Reihenfolge?
 
Zuletzt bearbeitet von einem Moderator:
Ja, die Reihenfolge g - s - b ist fix (steht für gold, silber, bronze). Ich habe deinen Code jetzt so eingebaut:

PHP:
ORDER BY
             jahrwm DESC,
             CONCAT(IF(wm REGEXP ('^[0-9]'), 'b_', 'a_'), wm)
LIMIT 0, 100";

Es erscheinen nun richtigerweise zuerst die Datensätze mit den Bilddateien, allerdings noch in der Reihenfolge b - g - s, also alphabetisch. Danach folgen, wie gewünscht und auch richtig sortiert, die Datensätze mit den Zahlenwerten.
 
Hallo CPoly,

dein Code klappt vorzüglich, damit wird meine Alternativlösung entbehrlich. Vielen Dank.

Hallo Yaslaw,

ich danke auch dir. Ich komme mit dem Code zwar noch nicht ganz klar, wie ich schon gepostet habe, merke mir den Tipp mit REGEXP aber auf jeden Fall vor.

Viele Grüße
hawaiian
 
Zurück