$clause = " OR ";//Change to OR after 1st WHERE
Ovenstående OR-operator vil få dit where-kriterier til at vælge en post, selvom 1 søgeord matcher attr-feltet. Skift det til " OG " for at forvente, at alle søgeord gælder.
Ydermere ser ... AND ATTRIBUTES.sub_cat_name='$currentproduct'"-kriteriet ud til at gælde for alle søgeord, så dette kriterium bør tilføjes én gang, ikke ved hver iteration af løkken. $currentproduct =$_POST['product']; rækken skal også flyttes foran løkken.
EDIT:for at overveje at ændre operatøren til OG og ikke have nogen rækker returneret.
...ATTRIBUTES.attr LIKE BINARY '$c'...
Hvis der ikke er jokertegn i $c, vil ovenstående kriterium kræve, at ordet matcher attr-feltet, som om =operatoren var blevet brugt, hvilket næppe vil ske. Jokertegn skal inkluderes i søgningen:'%$c%'
Plus noget beskyttelse mod sql-injektion ville også være rart.
EDIT2:Hvis hver attribut er gemt i sin egen post, så komplicerer det tingene en smule, da where-kriteriet evalueres mod en enkelt post, ikke en samling af dem.
Jeg giver dig en prøvevalgskommando, men du bliver nødt til at inkorporere den i din php-kode.
select product_details.* FROM product_details INNER JOIN
(select product_details.id, count(ATTRIBUTES.id) as total
FROM `product_details`
INNER JOIN `ATTRIBUTES` ON product_details.id=ATTRIBUTES.id
WHERE ATTRIBUTES.attr in (...)
GROUP BY product_details.id
HAVING total=...) as t
on t.id=product_details.id
Underforespørgslen tæller, hvor mange attributter der blev matchet for et produkt og eliminerer dem, hvor antallet ikke svarer til antallet af parametre indsendt via formularen. Den ydre forespørgsel får produktdetaljerne for dem, hvor antallet matchede.
For ... i in()-sætningen skal du angive en kommasepareret, ' medfølgende liste over nøgleordene, såsom:"'computer', 'æble'". Brug implode()-funktionen i php- og sztring-sammenkædning for at få resultaterne.
For ... i have-sætningen erstatter antallet af søgeord i $_POST['søgeord']-arrayet (du skal dog tjekke koden ind, om det er et array eller kun en enkelt værdi).
Alligevel bør du overveje indvirkningen af sql-injektion på din kode.