Mysql Sortierfrage
shadowman 21.11.2007 - 01:29 796 6
shadowman
OC Addicted
|
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
|
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
|
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
|
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
Legendwaffle, waffle!
|
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
|
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
|
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
|