sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Få produkter som har alla attribut listade

-- PHP (or any other languaje) parts are hardcoded here!!!!

SELECT p.*, hma.howmuchattr
-- howmuchattr is needed by HAVING clause, 
-- you can omit elsewhere (by surrounding SELECT or by programming languaje)

FROM products AS p 
LEFT JOIN product_attributes AS pa ON pa.product_id = p.id 
LEFT JOIN (
    SELECT product_id, count(*) as howmuchattr
    FROM product_attributes 
    GROUP BY product_id
) as hma on p.id = hma.product_id

WHERE 
pa.attribute_id IN 
(1,3)                    -- this cames from PHP (or any other languaje). Can be (1) for the other case
GROUP BY p.id
HAVING count(*) = howmuchattr;

se sqlfiddle här
se även det här svaret



  1. Det går inte att återställa root-lösenordet med --skip-grant-tables på ubuntu 16

  2. MySQL-variabelt format för en NOT IN-lista med värden

  3. GET-parametrar som är sårbara för SQL Injection - PHP

  4. SQL Server OM INTE FINNS Användning?