MySQL ... ORDER by XXX Sortieroptionen

Bash, Shell, PHP, Python, Perl, CGI
xamibor
Posts: 211
Joined: 2003-03-11 16:52

MySQL ... ORDER by XXX Sortieroptionen

Post by xamibor »

Hi,

ich habe da so ein kleines Problem :x und ich bekomme einfach keine Lösung :(

Also: ich habe eine Tabelle mit mehreren Feldern ... unteranderem das Feld "Kennziffer" es hat einen Aplhabetischen bzw. numärischen wert. (z.B. J100, K10, BZ1 ....)

Ich starte nun meine Abfrage und will das innerhhalb des SQL schon sortiert wird.

Ausgabe z.B.
J1
J2
J3...

KJ1
KJ2
KJ3 ...
KJ26
T1
T2
T3 ...
T9

Wie mache ich das er nach dem Buchstaben Sortiert und dann aber auch gleich die Zahlen berücksichtigt?

Ich hoffe ich habe micht verständlich ausgedrückt.

Gruß
Andreas
pollux
Posts: 52
Joined: 2003-03-05 18:55

Re: MySQL ... ORDER by XXX Sortieroptionen

Post by pollux »

Hi Andreas,

so wie Du das beschreibst, kann das eine größere Aktion werden 8O .

Es wäre viel einfacher, wenn Du die Daten etwas formatieren könntest. Also z.B. ein Trennzeichen zwischen die Buchstaben und die Ziffern oder immer eine feste Anzahl Ziffern (oder Buchstaben).

Bei einer festen Anzahl Ziffern kannst Du direkt nach dem Feld Kennziffer sortieren.

:idea: Ansonsten besteht der Trick darin, das Feld für die Sortiererei aufzuteilen in einen Buchstabenteil und einen Zahlenteil. Dann wird zunächst nach dem Buchstabenteil sortiert und anschließend nach dem Zahlenteil.

Hier ein Beispiel, wenn das Leerzeichen als Trennung zwischen Buchstaben und Ziffern eingesetzt wird:

Code: Select all

... ORDER BY 
  LEFT(Kennzeichen, POSITION(' ' IN Kennzeichen)-1),
  RIGHT(Kennzeichen, POSITION(' ' IN REVERSE(Kennzeichen))-1)
Wenn es nicht möglich sein sollte, den Inhalt des Feldes Kennzeichen zu verändern, dann melde Dich nochmal.

Viele Grüße

Pollux
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: MySQL ... ORDER by XXX Sortieroptionen

Post by xamibor »

danke das du dir die mühe gemacht hast um mir zu helfen :-D

Die Formatierung zu ändern wäre nicht so einfach es sind weit mehr als 900 Datensätze :?

Werde aber mal überlegen ob es sich nicht einricht lässt.

Gruß
Andreas
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: MySQL ... ORDER by XXX Sortieroptionen

Post by xamibor »

sorry habe noch etwas vergessen oder nicht ganz verstanden ..

du schreibst:

Code: Select all

... ORDER BY 
  LEFT(Kennzeichen, POSITION(' ' IN Kennzeichen)-1), 
  RIGHT(Kennzeichen, POSITION(' ' IN REVERSE(Kennzeichen))-1) 
gilt das auch wenn z.B. Die kennziffer JK 22 bzw JK-22 ist .... also mehrere Buchstaben?

wenn ich die abfrage richtig verstanden habe suchst du nach einem trenner ... freizeichen bzw. minus.... ich nehme an das so was aich in irgend einer DOKU steht wenn du dazu ein link hast wäre cht super :-)

Gruß
Andreas
pollux
Posts: 52
Joined: 2003-03-05 18:55

Re: MySQL ... ORDER by XXX Sortieroptionen

Post by pollux »

Hallo Andreas,

zunächst muss ich mich korrigieren. Ich habe die Abfrage nicht ausprobiert und es fehlt ein Detail:

Code: Select all

... ORDER BY
  LEFT(Kennzeichen, POSITION(' ' IN Kennzeichen)-1),
  RIGHT(Kennzeichen, POSITION(' ' IN REVERSE(Kennzeichen))-1) + 0

Beachte das "+0" am Ende des zweiten Ausdrucks. Dadurch wird die Zeichenfolge als Zahl interpretiert. Sonst würde z.B. 12 vor die 2 sortiert werden.

Die Abfrage hast Du richtig verstanden. Der Feldwert wird aufgeteilt in die Buchstaben (LEFT(...)) und die Zahlen (RIGHT(...)).
Das können beliebig viele Buchstaben und beliebig viele Zahlen sein. Was passiert, wenn es keine Zeichen oder keine Zahlen sind oder nicht genau ein Trennzeichen vorkommt würde ich mal als undefiniert ansehen. Du kannst das aber natürlich ausprobieren, indem Du die Werte einfach mal SELECTest :)

Die Doku zu MySQL findest Du unter:
http://www.mysql.com/documentation/index.html
Direkt zu den Funktionen: http://www.mysql.com/documentation/mysq ... _functions
Ansonsten gilt: Wer googlet, hat's leichter!

Um die Daten zu ändern, würde ich ein Sprache empfehlen, die RegEx beherrscht. Also z.B. Perl oder PHP. Da kannst Du Dir das Feld ganz einfach aufteilen lassen, ein Trennzeichen dazwischen hängen und diesen neuen Wert zurück in die DB schreiben. Leider kann man mit MySQL RegEx nur benutzen um zu prüfen, ob ein String einem Muster entspricht, nicht jedoch um einzelne Daten eines Strings zu extrahieren :(

Viele Grüße

Pollux
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: MySQL ... ORDER by XXX Sortieroptionen

Post by xamibor »

Habe heute mal nach gefragt .... das Problem ist das die Kenziffern schon im Druck sind das heißt ich darf sie nicht ändern sie müssen so geschrieben werden "JD12, J2, ZK23 ..."

wie würdest du es anstellen um die Buchstaben / Zahlen zu trennen voneinander?

Mir schwebt vor das ich erst auslese dann trenne und dann sortiere ... nur wie ... habe ich da ein denk fehler?

Gruß
Andreas
pollux
Posts: 52
Joined: 2003-03-05 18:55

Re: MySQL ... ORDER by XXX Sortieroptionen

Post by pollux »

Hi Andreas,

hat etwas gedauert, aber leider hatte auch das Christkind keine einfache Lösung für Dein Problem parat.
Das Problem ist, wie kann MySQL feststellen, wo die Buchstaben aufhören und die Ziffern anfangen?
Es gibt zwar in MySQL RegEx, aber mit denen kann man nur testen, ob eine Zeichenfolge einem Muster entspricht und keine Teile einer Zeichenfolge extrahieren.
Zum Vergleich: In Perl würde so etwas in einer Zeile geschehen:

Code: Select all

($buchstaben, $ziffern) = ($1, $2) if ($zeichenfolge =~ /([A-Z]+)(d+)/;
Wenn Du also irgendeine Möglichkeit siehst, ein zusätzliches Feld in Deine Datenbank einzufügen, welches gleich beim einfügen neuer Datensätze mit der formatierten Kennzeichnung gefüllt wird, wäre das die beste Variante.
Falls das nicht möglich ist, weil Du keinen Zugriff auf die Software hast, die die Datensätze erstellt, dann müssen wir MySQL dazu überreden, das korrekte Ergebnis ohne Hilfe zu liefern.

Grüße

Pollux
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: MySQL ... ORDER by XXX Sortieroptionen

Post by jtb »

xamibor wrote:Hi,

ich habe da so ein kleines Problem :x und ich bekomme einfach keine Lösung :(

Also: ich habe eine Tabelle mit mehreren Feldern ... unteranderem das Feld "Kennziffer" es hat einen Aplhabetischen bzw. numärischen wert. (z.B. J100, K10, BZ1 ....)
[..]
Wie mache ich das er nach dem Buchstaben Sortiert und dann aber auch gleich die Zahlen berücksichtigt?
schon mal darüber nachgedacht, dein Datenbankdesign zu ändern?
Ich vermute mal, dass die Zahl vom Buchstaben abhängig ist?
xamibor
Posts: 211
Joined: 2003-03-11 16:52

Re: MySQL ... ORDER by XXX Sortieroptionen

Post by xamibor »

Danke für eure Tipps.

Wie würde ich den ein bestehende DB mit ca. 900 Daten Sätze
in einem Rutsch in folgende Schreibweise um ändern?

Schreibweise:
J 99
JK 99
j 9

also mit freizeichen ....

Gruß
Andreas