Hallo
Ich vermute eher, dass Du durch eine Typumwandlung das Problem erst erzeugt hast. Bitte poste daher Dein SQL-Statement.
Mein SQL-Statement:
"SELECT IF(@a:=LOCATE('|', preis), LEFT(preis, @a - 1), preis) AS Preis FROM kategorien WHERE kat_code REGEXP '^$kat_code.*' AND preis!='' ORDER BY preis"
preis ist also vom Typ Zeichenkette.
Warum wunderst Du Dich dann, dass entsprechend sortiert wird.
Du hast also einen senkrechten Strich in Deinem Preis,
Du suchst das was links davon ist,
in Deiner WHERE-Klausel befindet sich Code einer Programmiersprache
und ein Zeichenkettenvergleich, der eher ein Vergleich mit dem speziellen
Wert NULL sein sollte, wenn die Spalte vernünftig definiert wäre.
Warum speicherst Du Deine Daten in einem solch ungeeigneten Format?
Wenn Du viele Daten in der Spalte hast, musst Du einen Index auf eine
berechnete Spalte setzen, damit die Performance nicht in die Knie geht.
Der für Preise sinnvolle Datentyp ist übrigens ein exakter Festkommawert,
DECIMAL, siehe Handbuch - nicht float und erst recht nicht ein Zeichenkettentyp.
Freundliche Grüße
Vinzenz