Simone: Null Problem Mysql

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

  1. 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.

    1. 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.)

      1. 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

        --
        Güter auf die Bahn!
  2. 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