sql >> Databáze >  >> RDS >> Mysql

Vyberte produkty podle více atributů pomocí AND místo toho NEBO zřetězení, datového modelu EAV

Váš dílčí dotaz by měl vypadat takto:

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

toto řešení používá poddotaz GROUP BY. Musíte použít OR, protože atribut nemůže být Memory a Color současně na stejném řádku, oba mohou být pravdivé, ale na různých řádcích. COUNT(DISTINCT values.name) počítá atributy čísla, které buď barva, nebo paměť, pokud je 2, pak existuje alespoň 1 řádek, kde platí první podmínka, a 1 řádek, kde platí i druhá.




  1. Dotaz MySQL pro více tabulek, které jsou sekundárními tabulkami s více položkami?

  2. Třídění SQL podle prvních dvou znaků polí

  3. Jak mohu vybrat řádky v obráceném pořadí v MySQL?

  4. Date vrátí hodnoty null po odeslání editačního formuláře v php