Mailinglisten-Archive |
> > Gibt es ein Zeichen im My-SQL Select-Befehl, mit dem ich > die Suche nach > > einem Feld unterdrücken kann? > > Ein Beispiel: > > > > SELECT NAME, VORNAME from user_table where NAME='$SEARCH_NAME' and > > VORNAME='$SEARCH_VORNAME' > > > > Die Variablen $SEARCH_NAME und $SEARCH_VORNAME werden von > einem Formular > > übergeben. > > > > Nun könnte es ja sein, das eine der Variablen leer ist. Nun würde > > ich gerne > > diese leere Variable im Bedarfsfall z.B. durch ein * > ersetzen, damit MySQL > > dann die Suchbedingung ignoriert. > > > > Hi Cris, > > Versuch es mal damit: > > $qNAME = ($SEARCH_NAME != "")?"NAME='$SEARCH_NAME' ":"1"; > $qVORNAME = ($SEARCH_VORNAME != > "")?"VORNAME='$SEARCH_VORNAME' ":"1"; > $qetc..1 > $qetc..2... > > $query="select NAME, VORNAME from user_table where $qNAME and > $qVORNAME"; > > z.B bei übergabe vom Formular: > NAME=MEIER > VORNAME=leer > > würde folgende Abfrage entstehen. > > select * from VORNAME, NACHNAME from user_table where > NAME='Meier' and 1 > > Ergebnis: alle mit NAME=MEIER würden gefunden werden egal was für ein > Vorname enthalten ist etc.... Warum macht Ihr es denn alle so kompliziert? Ich kann doch meinen Querystring so zusammenbauen, daß bei einem leeren Feld gar keine Bedingung in die Abfrage einfließt! Das würde 1. mit Sicherheit funktionieren und 2. auch die performanteste Lösung sein! Beispiel: ... If (!is_empty($Name)) $where[]='name='.$Name; If (!is_empty($Vorname)) $where[]='name='.$Vorname; ... $querystring=implode(' AND ',$where); // Bastelt die Where-Bedingung zusammen $querystring='SELECT * FROM Tabelle WHERE'.$querystring; ... Wenn das bei sehr vielen Feldern zuviel Arbeit ist, jedes Feld einzeln aufzuführen, kann man meines Wissens eine Schleife basteln, die diese Aktion für jedes Feld macht. Stichwort $HTTP_GET_VARS/$HTTP_POST_VARS. Gruß Stefan
php::bar PHP Wiki - Listenarchive