Suche nach Postleitzahl in MySQL-DB funktioniert nicht bei PLZ welche mit 0 beginnen

dwex

Erfahrenes Mitglied
Hallo Leute,

ich habe wieder ein mächtiges Problem.

Ich habe hier eine MySQL-DB mit Einträgen (Name, Vorname, PLZ, Ort etc.)
Jetzt habe ich mir eine Suchabfrage gebastelt mit der ich entweder nach der PLZ oder mit einem Freitext in Name bzw. Beschreibung suchen kann und das ganze auch gleichzeitig.

Wenn ich nun in das PLZ-Feld eine 1,2,3....oder 9 eingebe dann werden mir auch alle Einträge welche eben mit der jeweiligen Zahl beginnen angezeigt. Gleiches gilt für die Kombisuche.

EDIT:
streiche: Jetzt kommt das Phänomen - Wenn ich jedoch nach der PLZ 0 oder aber auch 09 suche dann bekomme ich bei 0 nichts ausgegeben und bei 09 alle Einträge welche in der PLZ mit 9 beginnen.
setze: Jetzt kommt das Phänomen - Wenn ich jedoch nach der PLZ 0 suche dann bekomme ich nichts ausgegeben.

Kann mir hier jemand helfen - bin schon am verzweifeln.

Hier noch die relevanten Codeabschnitte:
PHP:
if($_POST['plz'] && !$_POST['freitext']) {
    $plz = $_POST['plz'];
    $abfrage = mysql_query("SELECT * FROM `items` WHERE `plz` LIKE '$plz%' AND `aktiv` = '1'");
    $zeilen = mysql_num_rows($abfrage);

    $ersetzung .= "<b>".$zeilen." Datensätze gefunden</b><br><br>";

    while($ds = mysql_fetch_array($abfrage)) {

        $ersetzung .= '<a href="./details.php?id='.$ds['items_id'].'" target="_blank">';
        $ersetzung .= $ds['firma']."<br>";
        $ersetzung .= '</a>';

    }
}

if($_POST['freitext'] && !$_POST['plz']) {
    $freitext = $_POST['freitext'];
    $abfrage = mysql_query("SELECT * FROM `items` WHERE `firma` LIKE '%$freitext%' OR `beschreibung` LIKE '%$freitext%' AND `aktiv` = '1'");
    $zeilen = mysql_num_rows($abfrage);

    $ersetzung .= "<b>".$zeilen." Datensätze gefunden</b><br><br>";

    while($ds = mysql_fetch_array($abfrage)) {

        $ersetzung .= '<a href="./details.php?id='.$ds['items_id'].'" target="_blank">';
        $ersetzung .= $ds['firma']."<br>";
        $ersetzung .= '</a>';

    }
}

if($_POST['plz'] && $_POST['freitext']) {
    $plz = $_POST['plz'];
    $freitext = $_POST['freitext'];
    $abfrage = mysql_query("SELECT * FROM `items` WHERE `plz` LIKE '$plz%' AND (`firma` LIKE '%$freitext%' OR `beschreibung` LIKE '%$freitext%') AND `aktiv` = '1' ");
    $zeilen = mysql_num_rows($abfrage);

    $ersetzung .= "<b>".$zeilen." Datensätze gefunden</b><br><br>";

    while($ds = mysql_fetch_array($abfrage)) {

        $ersetzung .= '<a href="./details.php?id='.$ds['items_id'].'" target="_blank">';
        $ersetzung .= $ds['firma']."<br>";
        $ersetzung .= '</a>';

    }
}
Vielen Dank im Voraus!
 
Zuletzt bearbeitet:
Handelt es sich bei der PLZ-Spalte um eine Integer-Typ?. Weil dann eine führende Null automatisch entfernt wird. Du solltes es am besten in VARCHAR(5) ändern
 
Hallo,

nein die Spalte ist kein Integer sondern Varchar(5).
Den ersten Fehler habe ich auch schon gefunden.
Ich habe die Variable $plz in integer umgewandelt - das mache ich jetzt nicht mehr.
Dieses behebt aber nur das Problem mit der Suche nach 09 - hier wird jetzt korrekt nach allen PLZ gesucht welche mit 09 beginnen.

Die anderen Probleme bestehen aber nach wie vor - ich habe den Quelltext in meiner Frage oben entsprächend abgeändert.
 
Muss mal diese Frage nochmal nach vorne holen!
Kann mir denn keiner helfen?
 
Hallo!

Ob es mit VARCHAR funktioniert weiss ich nicht.

Ich habe bei mir für die Postleitzahlen INT(5), UNSIGNED ZEROFILL, NOT NULL und als Standard 00000 für die Spalte angegeben.
Getestet habe ich es mit unserem Postleitzahlen-Dump und phpMyAdmin, letzteres dürfte aber wahrscheinlich keine Rolle spielen.
Code:
SELECT * 
FROM `orte` 
WHERE `PLZ` LIKE '0%'
AND `Ort` LIKE 'Dresden'
LIMIT 0 , 10000
Ergebnis: 129 Treffer.

Code:
SELECT * 
FROM `orte` 
WHERE `PLZ` LIKE '0%'
LIMIT 0 , 10000
Ergebnis: 5958 Treffer.

Code:
SELECT * 
FROM `orte` 
WHERE `PLZ` LIKE '01%'
AND `Ort` LIKE 'Dresden'
LIMIT 0 , 10000
Ergebnis: 129 Treffer.

Code:
SELECT * 
FROM `orte` 
WHERE `PLZ` LIKE '01%'
LIMIT 0 , 10000
Ergebnis: 1066 Treffer.

Wie Du siehst habe ich zuerst nach allen Postleitzahlen die mit 0 beginnen gesucht.
Zuerst mit Ort, dann ohne Ort.
Anschliessend das gleiche nochmal mit Postleitzahlen die mit 01 beginnen.
Ganz offensichtlich funktioniert es also auch nach 0 zu suchen.

Irgendwas scheinst Du bei Dir wohl verkehrt gemacht zu haben.

Gruss Dr Dau
 
Zurück