Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wybierz produkty według wielu atrybutów, używając zamiast tego łącznika ORAZ, modelu danych EAV

Twoje podzapytanie powinno wyglądać tak:

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

to rozwiązanie używa podzapytania GROUP BY. Musisz użyć OR, ponieważ atrybut nie może być jednocześnie pamięcią i kolorem w tym samym wierszu, oba mogą być prawdziwe, ale w różnych wierszach. COUNT(DISTINCT atrybuty.nazwa) zlicza atrybuty liczbowe dla koloru lub pamięci.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy powinienem używać PreparedStatements do wszystkich wstawek do mojej bazy danych w Javie?

  2. SQL SELECT LIKE (niewrażliwa wielkość liter)

  3. MYSQL znajduje wszystkie wiersze, w których drugi wiersz ma podane wartości

  4. Dlaczego MySQL całkowicie przeformatowuje tekst zapytania VIEW?

  5. Jak powiedzieć Optymalizatorowi MySQL, aby używał indeksu w tabeli pochodnej?