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

Vælg produkter efter flere attributter ved at bruge OG i stedet for ELLER sammenkædning, Datamodel EAV

Din underforespørgsel skal være sådan her:

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

denne løsning bruger en GROUP BY underforespørgsel. Du skal bruge OR, fordi attributten ikke kan være Hukommelse og Farve på samme tid på samme række, de kan begge være sande, men på forskellige rækker. COUNT(DISTINCT attributes.name) tæller de antal attributter, som enten farve eller hukommelse, hvis det er 2, så er der mindst 1 række, hvor den første betingelse er sand, og 1 række, hvor den anden også er sand.




  1. SQLSTATE[22007]:Ugyldigt datetime-format:1366 Forkert heltalsværdi:'column_name' i Laravel

  2. Få direkte adgang til MySQL-databasen fra iPhone

  3. Postgresql vs. MySQL:hvordan sammenligner deres datastørrelser med hinanden?

  4. Sådan forbedrer du forespørgselsydeevne med mange JOINs