sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fråga för att söka efter flera attribut och värde_id

Det låter som att du behöver använda GROUP BY och HAVING klausuler.

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

Se till att du har ett unikt index över product_id och attr_id för att detta ska fungera ordentligt (du borde redan ha detta eftersom det sannolikt inte skulle vara vettigt för en produkt att ha flera poster med samma attr_id ).

Du måste också se till att du undviker dina värden för användning i din SQL om du inte redan gör det. Jag visar dessa variabler här med ? vilket, om du använder förberedda satser, skulle vara ett sätt att skriva denna SQL.




  1. Lagrad procedur och behörigheter - räcker det med EXECUTE?

  2. Förhandsgranska dokument i Microsoft Access Form

  3. Formatera en SQL-tidsstämpel med PHP

  4. Varning:mysql_result() förväntar sig att parameter 1 är resurs, boolesk given