$clause = " OR ";//Change to OR after 1st WHERE
L'operatore OR di cui sopra farà sì che i tuoi criteri where selezionino un record anche se 1 parola chiave corrisponde al campo attr. Cambialo in " AND " per aspettarti che tutte le parole chiave vengano applicate.
Inoltre, il criterio ... AND ATTRIBUTES.sub_cat_name='$currentproduct'" sembra essere applicato a tutte le parole chiave, quindi questo criterio dovrebbe essere aggiunto una volta, non ad ogni iterazione del ciclo. $currentproduct =$_POST['product']; la riga dovrebbe anche essere spostata davanti al ciclo.
EDIT:per riflettere sulla modifica dell'operatore in AND e sulla mancata restituzione di alcuna riga.
...ATTRIBUTES.attr LIKE BINARY '$c'...
Se non ci sono caratteri jolly in $c, il criterio precedente richiederà che la parola corrisponda al campo attr come se fosse stato utilizzato l'operatore =, cosa che è improbabile che accada. I caratteri jolly devono essere inclusi nella ricerca:'%$c%'
Inoltre, sarebbe utile anche una protezione dall'iniezione di sql.
EDIT2:Se ogni attributo è memorizzato nel proprio record, complica un po' le cose, poiché i criteri where vengono valutati rispetto a un singolo record, non a una raccolta di essi.
Ti darò un comando di selezione di esempio, ma dovrai incorporarlo nel tuo codice php.
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
La sottoquery conta quanti attributi sono stati abbinati per un prodotto ed elimina quelli il cui conteggio non è uguale al numero di parametri inviati tramite il modulo. La query esterna ottiene i dettagli del prodotto per quelli in cui il conteggio corrispondeva.
Per la ... nella clausola in() è necessario fornire un 'elenco racchiuso di parole chiave separate da virgole, come:"'computer', 'apple'". Usa la funzione implode() nella concatenazione di php e sztring per ottenere i risultati.
Per la ... nella clausola having, sostituisci il numero di parole chiave nell'array $_POST['keyword'] (dovresti controllare nel codice se si tratta di un array o di un singolo valore, però).
Tuttavia, dovresti considerare l'impatto dell'iniezione di sql sul tuo codice.