sql >> Databasteknik >  >> RDS >> Mysql

Välj produkter efter flera attribut, använd AND istället ELLER sammanlänkning, Datamodell EAV

Din underfråga bör vara så här:

SELECT
  attributes_entity.product_id
FROM
  attributes_entity INNER JOIN attributes
  ON attributes_entity.attribute_id=attributes.id
  INNER JOIN attributes_values ON
  attributes_entity.value_id=attributes_values.id 
WHERE 
  (attributes.name="Memory" AND attributes_values.value="16GB") 
  OR
  (attributes.name="Color" AND attributes_values.value="Gold")
GROUP BY
  attributes_entity.product_id
HAVING
  COUNT(DISTINCT attributes.name)=2

denna lösning använder en GROUP BY-underfråga. Du måste använda OR eftersom attributet inte kan vara Memory och Color samtidigt på samma rad, de kan båda vara sanna men på olika rader. COUNT(DISTINCT attributes.name) räknar antalet attribut som antingen Color eller Memory, om det är 2 så finns det minst 1 rad där det första villkoret är sant och 1 rad där det andra också är sant.




  1. MySQL - Hur man räknar alla rader per tabell i en fråga

  2. En eller flera databaser per Docker-behållare

  3. Beräknar kumulativ summa i PostgreSQL

  4. MYSQL:OM har OR-villkor ®EXP-matchning