Bei umfangreichen Datenbeständen ist es schneller, die Bedingungen vorher per PHP zu testen, ob sie einen Wert enthalten. Dann kann man sie weglassen, bzw durch den Wert "1" ersetzen, dann muss man die AND- und OR-Anweisungen nicht ändern. Umfangreiche OR-Verknüpfungen werden dagegen für jede Zeile der Tabelle wieder ausgeführt.
Bei wenigen Daten in der Tabelle ist es aber schneller, die Arbeit von der Datenbank machen zu lassen.
So kann es aussehen:
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
$sql="SELECT * FROM tabelle WHERE ";
if (!isset($var1)) {
$sql.="1 ";
}
else {
$sql.=" bedingung1 = '$var1' ";
}
if (!isset($var2)) {
$sql.="1 ";
}
else {
$sql.=" AND bedingung1 = '$var2' ";
}
// und so weiter ...
$sql.=" ORDER BY xzy";
|
So werden leere Bedingungen durch "1" ersetzt. "1" ist immer wahr und bedeutet somit keinen Zeitverlust beim Ausführen der Abfrage. Wenn z.B. drei von fünf Bedingungen gefüllt sind, kann es so aussehen:
|
Quellcode
|
1
|
SELECT * FROM tabelle WHERE 1 AND bedingung2='abc' AND bedingung3='def' AND 1 AND bedingung5='ghi' ORDER BY xyz
|
Alfons