MySQL ... ORDER by XXX Sortieroptionen
MySQL ... ORDER by XXX Sortieroptionen
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
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
Re: MySQL ... ORDER by XXX Sortieroptionen
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:
Wenn es nicht möglich sein sollte, den Inhalt des Feldes Kennzeichen zu verändern, dann melde Dich nochmal.
Viele Grüße
Pollux
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)
Viele Grüße
Pollux
Re: MySQL ... ORDER by XXX Sortieroptionen
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
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
Re: MySQL ... ORDER by XXX Sortieroptionen
sorry habe noch etwas vergessen oder nicht ganz verstanden ..
du schreibst:
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
du schreibst:
Code: Select all
... ORDER BY
LEFT(Kennzeichen, POSITION(' ' IN Kennzeichen)-1),
RIGHT(Kennzeichen, POSITION(' ' IN REVERSE(Kennzeichen))-1) 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
Re: MySQL ... ORDER by XXX Sortieroptionen
Hallo Andreas,
zunächst muss ich mich korrigieren. Ich habe die Abfrage nicht ausprobiert und es fehlt ein Detail:
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
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) + 0Beachte 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
Re: MySQL ... ORDER by XXX Sortieroptionen
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
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
Re: MySQL ... ORDER by XXX Sortieroptionen
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:
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
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+)/;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
Re: MySQL ... ORDER by XXX Sortieroptionen
schon mal darüber nachgedacht, dein Datenbankdesign zu ändern?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?
Ich vermute mal, dass die Zahl vom Buchstaben abhängig ist?
Re: MySQL ... ORDER by XXX Sortieroptionen
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
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