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

MySQL-forespørgsel for at søge i flere attributter og værdi_id

Det lyder som om du skal bruge GROUP BY og 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 */

Sørg for, at du har et unikt indeks på tværs af product_id og attr_id for at dette fungerer korrekt (du burde allerede have dette, da det sandsynligvis ikke ville give mening for et produkt at have flere poster med samme attr_id ).

Du skal også sikre dig, at du undslipper dine værdier til brug i din SQL, hvis du ikke allerede er det. Jeg viser disse variabler her med ? som, hvis du bruger forberedte udsagn, ville være en måde, du kan skrive denne SQL på.




  1. Sådan starter, genstarter, kontrollerer du status og stopper MySQL-serveren

  2. CASE-sætning i WHERE-sætning i SQL Server 2008

  3. Kopiering af en række i den samme tabel uden at skulle indtaste de 50+ kolonnenavne (mens du skifter 2 kolonner)

  4. Nested Set Model Php-bibliotek