Php-Ausdruck als WHERE in MySQL

NullAhnung

Aktives Mitglied
mal ne ganz doofe Frage... bevor ich mich mit der Sache weiterbeschäftige....

ich habe folgende Ausgangssituation
CODE
IF (($Filter1 != 0 AND ($Filter2 != 0) AND ($Filter3 != 0)){
$sql = "SELECT
Feld1,
Feld2,
Feld3

FROM Tabelle
WHERE Feld1 = $Filter1 AND Feld2 = $Filter2 AND Feld3 = $Filter3
";
}



und auch den Zustand, dass keine Filter gesetzt wurden, also alle...

CODE
IF (($Filter1==0) AND ($Filter2==0) AND ($Filter3==0)){
$sql = "SELECT
Feld1,
Feld2,
Feld3

FROM Tabelle
";
}


so und dann gibt es ja auch noch die verschiedenen Mögichkeiten wie

CODE
IF (($Filter1==0) AND ($Filter2!=0) AND ($Filter3!=0))
IF (($Filter1==0) AND ($Filter2==0) AND ($Filter3!=0))
etc....


also irgendwann habe ich Unmengen von Datenbankabfragen...

so nun ist meine Überlegung, und das ist die Frage: Kann man eine WHERE-Klausel als PHP-Ausdruck definieren...
dann benötigte ich nur 2 Abfragen....
nähmlich

CODE
IF (($Filter1==0) AND ($Filter2==0) AND ($Filter3==0)){
$sql = "SELECT
Feld1,
Feld2,
Feld3

FROM Tabelle
";
}



und

CODE
IF (($Filter1 != 0 AND ($Filter2 != 0) AND ($Filter3 != 0)){
$sql = "SELECT
Feld1,
Feld2,
Feld3

FROM Tabelle
<? ECHO $Where ?>
";
}


wobei ich dann etwa so aussehen würde...


CODE
IF (($Filter1==0) AND ($Filter2==1) AND ($Filter3==3)){
$Where="WHERE Feld1 =" .'$Filter1'." AND Feld2 =".' $Filter2'. usw....
;}



ich glaube die Vorstellung ist pervers und nicht möglich, aber ich frag trotzdem mal....
 
Wieso Pervers?

Ein SQL Statement als Grundstruktur und die WHERE Bedingungen anhand von Parametern zusammenschrauben.
Der Gedanke an sich ist nichtmal verkehrt, an der Umsetzung könnte man aber optimieren. Generell ist es auch hier wieder Situationsbedingt.

Ich handhabe das auch so und erspare mir unzählig viele separate und einzelne SQL Statements damit.
Das ganze wird dadurch aus übersichtlicher, der Code wird schlanker usw.


LG
 
danke ...

das ist auch mein ansinnen.... aber wie bloß....
huh.gif
 
Naja die Lösung hast du doch quasi schon selber gegeben.

Du hast nen grundlegendes Select, was bei allen Abfragen gleich ist:

CODE SELECT
Feld1,
Feld2,
Feld3


Und je nach Fall packst du dann noch nen where oder was auch immer ran etc.

zb. was du schon erwähnt hast:


CODE IF (($Filter1==0) AND ($Filter2==1) AND ($Filter3==3)){
$Where="WHERE Feld1 =" .'$Filter1'." AND Feld2 =".' $Filter2'. usw....
;}


Was ist da jetzt dein Problem?
 
QUOTE (NullAhnung @ So 2.09.2012, 16:39) aber wie bloß....
huh.gif



CODE
$WHERE = '';
if ( $Filter1 ) $WHERE .= 'AND Feld1='.$Filter1;
if ( $Filter2 ) $WHERE .= 'AND Feld2='.$Filter2;
if ( $Filter3 ) $WHERE .= 'AND Feld3='.$Filter3;

if ( strlen( $WHERE ) )
{
$query = ' SELECT .........
$query .= ' FROM .........
$query .= ' WHERE ' . substr($WHERE,4);
mysql_query ( $query );
}



Den WHERE zusammenbauen
vorrausgesetzt das etwas zusammengebaut wurde (strlen$WHERE)
den WHERE (ohne das erste AND) in den $query einsetzen
 
erstmal danke...

bin jetzt gerade erst wieder gekommen, werd es mal ausprobieren und bei bedarf nochmals fragen...
 
Zurück
Oben