Null Problem Mysql
Simone
- datenbank
0 Cochrane0 Axel Richter
Hallo,
Ich habe ein (Null) Problem ;)
Sobald eine Null im Anfang der PLZ ist funktioniert diese Abfrage nicht mehr.
$sql = "SELECT PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) IN ($element1) ORDER BY FIELD(PLZ,$element1)";
Ausgabe per Echo:
SELECT PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) IN (0115) ORDER BY FIELD(PLZ,0115)
Infos zur Spalte PLZ:
PLZ smallint(5) UNSIGNED ZEROFILL
Wo ist das Problem mit der Null ? Was mach ich falsch?
Kann Substring mit der führenden Null nicht umgehen?
Danke Euch
Simone
Infos zur Spalte PLZ:
PLZ smallint(5) UNSIGNED ZEROFILL
Hallo,
sicher bin ich mir nicht, aber ich vermute dass es hier Probleme gibt weil PLZ nicht als CHAR oder VARCHAR, sondernd als smallint definiert ist. Damit könnte es gehen.
Aber ehrlich gesagt würde es doch sehr helfen zu erfahren, was denn genau raus kommt wenn als erstes eine 0 da steht.
HI,
sicher bin ich mir nicht, aber ich vermute dass es hier Probleme gibt weil PLZ nicht als CHAR oder VARCHAR, sondernd als smallint definiert ist. Damit könnte es gehen.
auch das definieren eines Char bzw. Varchar brachte nicht den Erfolg.
SELECT PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) IN (0115) ORDER BY FIELD(PLZ,0115)
Diese Abfrage führt zu keiner Ausgabe.
Simone
PS: (die immer noch an der Null hängen bleibt.)
Hallo,
SELECT PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) IN (0115) ORDER BY FIELD(PLZ,0115)
Ehrlich gesagt hat sich bislang fast alles, was ich heute abend gepostet habe, als Mist erwiesen, darum könnte es gut sein dass das hier wieder falsch ist, aber mich wundert irgendwie wieso du da als Vergleich IN verwendest. Ich würde da eher sagen
SELECT PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) = "0115" ORDER BY FIELD(PLZ,0115)
aber ich kann nicht garantieren, dass das Erfolg hat. Ehrlich gesagt würde es mich sogar leicht wundern, wenn es Erfolg hätte.
Mit freundlichen Grüßen
Cochrane
Hallo,
Ich habe ein (Null) Problem ;)
Nein. NULL ist nicht gleich 0.
Sobald eine Null im Anfang der PLZ ist funktioniert diese Abfrage nicht mehr.
SELECT PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) IN (0115) ORDER BY FIELD(PLZ,0115)
Infos zur Spalte PLZ:
PLZ smallint(5) UNSIGNED ZEROFILL
Wo ist das Problem mit der Null ? Was mach ich falsch?
Du begehst den Fehler vieler Nutzer moderner Programmiersysteme. Du achtest nicht auf Typunterschiede. Das kommt daher, dass die Programmiersysteme häufig automatisch Typen anpassen. Allerdings klappt das nicht immer, wie gewünscht.
Substring ist eine String-Funktion. Dein Feld PLZ speichert aber Zahlen. Würdest Du Dir den Inhalt von PLZ unformatiert ausgeben lassen, würdest Du sehen, dass die führenden Nullen nicht gespeichert werden. In PLZ steht also 115, nicht 0115. Nachdem Du den Wert von PLZ mit einer String-Funktion behandelt hast, vergleichst Du ihn dann wiederum mit einer Zahl. Das sieht man daran, dass die 0115 in IN (0115) nicht in Anführungszeichen gesetzt ist.
Lösungsvorschlag:
PLZ wird ein String-Feld (char, varchar). Dort wird dann z.B. gespeichert:
PLZ
...
01151
01152
01153
03044
03056
...
Die Abfrage wird:
SELECT PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) IN ('0115')
und ergibt:
PLZ
01151
01152
01153
Was mich auch noch interessieren würde: Was soll
...ORDER BY FIELD(PLZ,0115)
bewirken?
viele Grüße
Axel