Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете продукти по множество атрибути, като използвате И вместо ИЛИ конкатенатор, модел на данни EAV

Вашата подзаявка трябва да бъде следната:

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

това решение използва подзаявка GROUP BY. Трябва да използвате ИЛИ, тъй като атрибутът не може да бъде Памет и Цвят по едно и също време на един и същи ред, те могат да бъдат верни, но на различни редове. COUNT(DISTINCT attributes.name) брои числовите атрибути, които са или Цвят, или Памет, ако е 2, тогава има поне 1 ред, където първото условие е вярно, и 1 ред, където другото също е вярно.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. фатална грешка 'stdio.h' Python 2.7.3 на Mac OS X 10.7.5

  2. Преброяване и групиране на колона с едно и също име в различни таблици (където клауза само от една таблица)

  3. Python се свързва с MySQL база данни с MySQL конектор и пример за PyMySQL

  4. Сериализацията на 'Closure' не е разрешена - laravel

  5. Pandas 0.20.2 to_sql() с помощта на MySQL