Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn sản phẩm theo nhiều thuộc tính, sử dụng AND thay thế HOẶC bộ nối, Mô hình dữ liệu EAV

Truy vấn con của bạn sẽ như thế này:

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

giải pháp này sử dụng truy vấn con GROUP BY. Bạn phải sử dụng HOẶC vì thuộc tính không thể là Bộ nhớ và Màu cùng một lúc trên cùng một hàng, cả hai đều có thể đúng nhưng trên các hàng khác nhau. COUNT (DISTINCT properties.name) đếm các thuộc tính số của Màu hoặc Bộ nhớ, nếu là 2 thì có ít nhất 1 hàng trong đó điều kiện đầu tiên là đúng và 1 hàng trong đó điều kiện còn lại cũng đúng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình kích hoạt MySQL có thể mô phỏng ràng buộc KIỂM TRA không?

  2. Sự cố $ _SESSION trong PHP

  3. Bật mục cuối cùng trong Mảng JSON trong MySQL 5.7

  4. Mã lỗi MySQL 1452 Ràng buộc khóa ngoại

  5. Sắp xếp một mảng PHP thành các cột