Mysql
 sql >> Database >  >> RDS >> Mysql

Query MySQL per cercare più attributi e value_id

Sembra che tu debba usare GROUP BY e HAVING clausole.

SELECT
    `product_id`,
    COUNT (`primary_key_id`) AS `attr_count` /* primary key field here */
FROM `products_attr_val`
WHERE
   (`attr_id` = ? AND `value_id` = ?)
   OR (`attr_id` = ? AND `value_id` = ?)
   /* additional as necessary
   OR (`attr_id` = ? AND `value_id` = ?)
   */
GROUP BY `product_id`
HAVING `attr_count` = ? /* value here should be equal to number of attributes you are checking for */

Assicurati di avere un indice univoco in product_id e attr_id affinché funzioni correttamente (dovresti già averlo poiché probabilmente non avrebbe senso per un prodotto avere più record con lo stesso attr_id ).

Devi anche assicurarti di eseguire l'escape dei tuoi valori da utilizzare nel tuo SQL se non lo sei già. Sto mostrando queste variabili qui con ? che, se usiamo le affermazioni preparate, sarebbe un modo in cui potresti scrivere questo SQL.