Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MySQL pour rechercher plusieurs attributs et value_id

Il semble que vous deviez utiliser GROUP BY et HAVING clauses.

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 */

Assurez-vous d'avoir un index unique sur product_id et attr_id pour que cela fonctionne correctement (vous devriez déjà l'avoir car cela n'aurait probablement pas de sens pour un produit d'avoir plusieurs enregistrements avec le même attr_id ).

Vous devez également vous assurer que vous échappez vos valeurs pour les utiliser dans votre SQL si vous ne l'êtes pas déjà. Je montre ces variables ici avec ? ce qui, si vous utilisez des instructions préparées, serait une façon d'écrire ce SQL.