"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Mysql Sortierfrage

shadowman 21.11.2007 - 01:29 796 6
Posts

shadowman

OC Addicted
Registered: Oct 2000
Location: Feldkirchen
Posts: 1612
Ich habe ein kleines Problem.

In einer Mysql Datenbank steht in einem Feld immer eine bestimmte Bezeichnung, nach der auch sortiert wird.
Nun hat sich nachträglich rausgestellt, dass in diesem Feld nicht nur Sachen wie Auto, Haus etc. steht, sondern manchmal eine Nummer mit Bindestrich davor steht.
Bei der Sortierung stehen diese Einträge dann natürlich ganz oben, was aber nicht sein soll.
Es soll "3-Auto" irgendwo bei den anderen Bezeichnungen mit "A" einsortiert werden.
Dachte das könnte ich mit Regexp lösen, indem ich beim Select ne eigene Spalte erzeuge und nach dieser sortiere. Leider kann MySql aber anscheinend keinen Teilstring aufgrund von Regexp ausgeben.

Kann mir jemand bei dem Problem helfen?

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
wird die Nummer-Strich-Kombination noch gebraucht oder könntest die einfach wegschneiden?
Alternativ könntest die Inhalte von der Spalte ja in eine neute Spalte schreiben - allerdings NUR die Buchstaben, also evtl per reg Expression ([a-zA-Z] )

shadowman

OC Addicted
Registered: Oct 2000
Location: Feldkirchen
Posts: 1612
Die Nummer wird leider gebraucht.
Frag mich nicht warum, ich checks auch nicht :)

In eine extra Spalte schreiben würde gehen, nur dann müsste das auch bei jeden neuen Eintrag geschehen.
Will mir das Umändern der restlichen Scripte eigentlich sparen.

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
wäre aber imho das schnellste. Wenn du vor jeder Abfrage erst nach einem alphanumerischen Substring parst ist sicher zacher als wenn er nur sortieren muss... (wüsste außerdem nicht ob das mysql-seitig ginge)

Ich hätte glaub ich per while-Schleife und preg_replace die Datensätze neu in eine Spalte geschrieben, nach der dann sortiert wird.

rettich

Legend
waffle, waffle!
Avatar
Registered: Jan 2004
Location: wien
Posts: 794
Zitat von shadowman
In eine extra Spalte schreiben würde gehen, nur dann müsste das auch bei jeden neuen Eintrag geschehen.
Will mir das Umändern der restlichen Scripte eigentlich sparen.

das kannst ja rein datenbankmäßig mit einem trigger erledigen, der den begriff nimmt, trimmt und in ein zusätzliches feld schreibt.

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

shadowman

OC Addicted
Registered: Oct 2000
Location: Feldkirchen
Posts: 1612
Leider rennt ne Mysql 4 irgendwas Version, da gehn leider keine Trigger.

Aber ich hab ne Lösung gefunden, keine Frage sieist nicht grade elegant wollte es aber einfach wissen.

SELECT Bezeichnung,if(Bezeichnung regexp "^[1-9]+-",substring(Bezeichnung,locate('-',Bezeichnung)),Bezeichnung) as sort
FROM Tabelle order by sort

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
wennf ad ist und du das häufig brauchst & du viele datensätze hast lass dir die Zeit ausgeben die er für die Sortierung braucht und vergleich mit einer Suche ohne dem regexp - würd mich interessieren wieviel zeit du verlierst
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz