sql >> Database >  >> RDS >> Mysql

Selecteer producten op meerdere attributen, gebruik AND in plaats van OR concatenator, Datamodel EAV

Uw subquery zou er als volgt uit moeten zien:

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

deze oplossing maakt gebruik van een GROUP BY subquery. U moet OR gebruiken omdat het attribuut niet tegelijkertijd Geheugen en Kleur in dezelfde rij kan zijn, ze kunnen beide waar zijn, maar in verschillende rijen. COUNT(DISTINCT attributes.name) telt het aantal attributen dat ofwel Kleur ofwel Geheugen is, als het 2 is, dan is er minstens 1 rij waar de eerste voorwaarde waar is en 1 rij waar de andere ook waar is.




  1. MySQL - Deze versie van MySQL ondersteunt de subquery 'LIMIT &IN/ALL/ANY/SOME nog niet

  2. Verbinding maken met DB met PHP Class werkt niet wanneer u resultaten probeert op te halen

  3. Bereken het gemiddelde van de kolom van de MYSQL-query

  4. Ingewikkelde query + pagineringscript