PHP - KOMPLEXE MYSQL ABFRAGE:
Gorginio
- programmiertechnik
Hallo Leute,
Ich habe ein kleines Problem.
Ich habe ein Suchformular in PHP geschrieben, dass mit Eingabefelder, Dropdownlisten (einer anderen Datenbank, die zB die Länderliste enthält) und Checkboxen funktioniert.
Dieser Teil funktioniert einwandfrei.
Nun will ich je nachdem welche Einträge der User ausgefüllt hat, eine Liste aller Treffer ausgeben.
Mein Problem konkret:
Wie muss ich die SELECT Anweisung formulieren, damit er alle ausgewählten Parameter bei der Suche in der Datenbank berücksichtigt werden.
Gibt es da eine "schnelle Möglichkeit," oder muss ich mit dem befehl "Case" alle theorethischen Möglichkeiten programmieren.
BSP:
Eingabefeld:
Name "NAME"
Dropdownlisten:
Länderliste: "COUNTRY"
Bundesländerliste: "STATE"
Checkbox:
Berufstätig: "JOB"
Kinder: "CHILDREN"
(Ausdrücke in "" sind Variablennamen"
Wenn also nur das Land ausgewählt ist, sollen alle Einträge aus dem Land angezeigt werden; Sind zB Land Job ausgewählt, soll er die nur diese Ergebnisse ausgeben?
Bitte um einen Tip in die richtige Richtung, denn bis jetzt habe ich nur einfache Suchen programmiert.
Vielen Dank im Vorraus,
Gorginio
Nabend,
Wie muss ich die SELECT Anweisung formulieren, damit er alle ausgewählten Parameter bei der Suche in der Datenbank berücksichtigt werden.
Wie hast du sie denn bisher zusammengebastelt?
Gibt es da eine "schnelle Möglichkeit," oder muss ich mit dem befehl "Case" alle theorethischen Möglichkeiten programmieren.
Kein Vvergleich möglich - s.o.
Aber prinzipiell:
Schreibe den ersten Teil zusammen (SELECT bla, bla FROM tabelle WHERE)
Eingabefeld:
Name "NAME"
Muss dieser im Query berücksichtigt werden?
ja -> überprüfe ob leer (Fehler) und ansonsten " name='irgendwas'"
nein -> nüschts.
Dropdownlisten:
Länderliste: "COUNTRY"
Bundesländerliste: "STATE"
Auch wieder so an die Query dranklatschen.
Checkbox:
Berufstätig: "JOB"
Kinder: "CHILDREN"
Überprüfe, ob du CB gesetzt ist. Wenn ja, Query erweitern.
Bis denne,
Hallo Gorginio,
[...]
Mein Problem konkret:
Wie muss ich die SELECT Anweisung formulieren, damit er alle ausgewählten Parameter bei der Suche in der Datenbank berücksichtigt werden.
Gibt es da eine "schnelle Möglichkeit," oder muss ich mit dem befehl "Case" alle theorethischen Möglichkeiten programmieren.
[...]
Wenn also nur das Land ausgewählt ist, sollen alle Einträge aus dem Land angezeigt werden; Sind zB Land Job ausgewählt, soll er die nur diese Ergebnisse ausgeben?
Du musst Deine Bedingung (WHERE-Anweisung) aus den übermittelten Parametern zusammenbauen.
<virtualpseudocode>
foreach ($param as $name => $value) {
/* hier evtl. Plausibilitätsprüfung von $value abhängig von $name */
$temp[] = $name." = '".addslashes($value)."'";
}
$where = join(' AND ', $temp);
</virtualpseudocode>
Gruß Alex
so wie ich das verstanden habe, willst du einfach alle parameter aus einem formular in eine suche einbinden. da du nicht weisst, wie viele es sein werden, würde ich einfach den übergabearray als anhaltspunkt nehmen. angenommen, du hast in deinem $_POST array nur noch die relevanten felder drin - also vorher alles andere weggeprüft, dann brauchst du doch bloss den anfach der 'select' anweisung in einen string zu schreiben:
$actualSelect = "SELECT 'irgendwas' FROM 'irgendwo' WHERE";
und dann in einer foreach schleife für jedes element die abfrage dran hängen:
$actualSelect.= "'eigenschaft' = " . $_POST['eigenschaft'] . " AND";
im letzten schleifendurchlauf lässt du 'AND' durch ein semikolon ersetzen - fertig.
griese, andi