Ich betreibe ein kleines Beautyportal, bei dem die Besucher über eine interne Suchmaschine deutschlandweit Studios suchen können.
Innerhalb einer Maske kann der Besucher mittels CheckBox verschiedene Bereiche (zb. Kosmetik, Nagel, Fußpflege, Haare, Accessoires) auswählen, sowie den gewünschten Ort in ein Feld eingegeben.
Ich habe nun folgende ( in PHP eingebettete ) SQL Abfrage, bei welcher die where Klausel teilweise dynamisch aufgebaut werden soll.
Wählt der Besucher zb. den Bereich Kosmetik, wird in der where Klausel der Variableninhalt $SelKosmetik verwendet usw.
Das Problem besteht nun im "OR". Nachdem eine beliebige Kombination der fünf Wahlmöglichkeiten (Bereiche, die der Besucher wählen kann)gegeben sein muss, kann ich das OR NICHT (wie im untenstehenden Beispiel geschehen) einfach jeweils anhängen.
Anders gesagt: Das untenstehende Beispiel funktioniert nur, wenn ich alle oder nur die letzte Möglichkeit auswähle. Ansonsten haben ich ein OR zuviel.
Gibt es da eine Lösung ?
$OrderFeld = "f.Firmenname";
$ProjektCount = 0;
if (isSet($kosmetik) && ($kosmetik == "X"))
{
$SelKosmetik = "fp.ProjektNr = 7 OR";
$ProjektCount++;
}
if (isSet($nail) && ($nail == "X"))
{
$SelNail = "fp.ProjektNr = 29 OR";
$ProjektCount++;
}
if (isSet($feet) && ($feet == "X"))
{
$SelFeet = "fp.ProjektNr = 90 OR";
$ProjektCount++;
}
if (isSet($hair) && ($hair == "X"))
{
$SelHair = "fp.ProjektNr = 38 OR";
$ProjektCount++;
}
if (isSet($accessoires) && ($accessoires == "X"))
{
$SelAccessoires = "fp.ProjektNr = 217";
$ProjektCount++;
}
$abfrage = sprintf ("%s %s %s %s %s %s %s %s %s %s %s %s %s",
"SELECT f.FNr, f.KdNr, f.Firmenname, f.Zusatz, f.Url, a.Strasse, a.PLZ, a.Ort",
"FROM FIRMA f",
"INNER JOIN FIRMA_PROJEKT fp ON f.FNr = fp.FNr",
"INNER JOIN PROJEKT p ON fp.ProjektNr = p.ProjektNr",
"INNER JOIN ADRESSE a ON f.Adresse = a.AdrIndex",
"WHERE (a.Ort LIKE '%$Ort%' OR a.Plz LIKE '$Ort%') AND",
$SelKosmetik,
$SelNail,
$Selfeet,
$SelHair,
$SelAccessoires,
"GROUP BY f.FNr HAVING count( f.FNr ) >$ProjektCount-1",
"order by $OrderFeld");
$res = mysql_query($abfrage);
$num1=mysql_num_rows($res);