Mysql Sortierfrage

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/mysql_sortierfrage_188093/page_1 - zur Vollversion wechseln!


shadowman schrieb am 21.11.2007 um 01:29

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 schrieb am 21.11.2007 um 01:34

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 schrieb am 21.11.2007 um 01:40

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 schrieb am 21.11.2007 um 01:45

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 schrieb am 21.11.2007 um 09:52

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 schrieb am 21.11.2007 um 16:15

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 schrieb am 21.11.2007 um 16:24

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




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025