Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfrage zum Durchsuchen mehrerer Attribute und value_id

Klingt so, als müssten Sie GROUP BY verwenden und HAVING Klauseln.

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

Stellen Sie sicher, dass Sie einen eindeutigen Index für product_id haben und attr_id damit dies ordnungsgemäß funktioniert (Sie sollten dies bereits haben, da es für ein Produkt wahrscheinlich nicht sinnvoll wäre, mehrere Datensätze mit derselben attr_id zu haben ).

Sie müssen auch sicherstellen, dass Sie Ihre Werte für die Verwendung in Ihrem SQL-Code maskieren, falls dies noch nicht geschehen ist. Ich zeige diese Variablen hier mit ? was, wenn Sie vorbereitete Anweisungen verwenden, eine Möglichkeit wäre, diese SQL zu schreiben.