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

Nhận sản phẩm với các thuộc tính mong muốn

Hai bộ lọc cần được xử lý riêng biệt, vì mỗi bộ lọc cần xem xét các bản ghi hoàn toàn khác nhau trong products_attributes_values bảng.

SELECT * FROM products
WHERE category_id IN ('6', '7', '29', '8', '9', '36')
    AND id IN (
        SELECT product_id
        FROM products_attributes_values
        WHERE attribute_id = 2
            AND value_id = '4')
    AND id IN (
        SELECT product_id
        FROM products_attributes_values
        WHERE attribute_id = 3
            AND value_id = '11')

Từ UAMoto:

Nó hoạt động nhưng hơi chậm, vì vậy tôi đã sử dụng bí danh tham gia như một người đã nói với tôi:

"SELECT * FROM `products`
JOIN `products_attributes_values` AS pav1
ON (`pav1`.`product_id` = `products`.`id`)
JOIN `products_attributes_values` AS pav2
ON (`pav2`.`product_id` = `products`.`id`)
WHERE `category_id` IN ('6', '7', '29', '8', '9', '36')
AND (`pav1`.`attribute_id` = '2' AND `pav1`.`value_id` = '4')
AND (`pav2`.`attribute_id` = '3' AND `pav2`.`value_id` = '11')"

Các truy vấn được cập nhật cho sự kết hợp của các thuộc tính:

SELECT * FROM products
WHERE category_id IN ('6', '7', '29', '8', '9', '36')
    AND id IN (
        SELECT product_id
        FROM products_attributes_values
        WHERE attribute_id = 2
            AND value_id IN ('4', '5'))
    AND id IN (
        SELECT product_id
        FROM products_attributes_values
        WHERE attribute_id = 3
            AND value_id IN ('11', '62'))

hoặc

SELECT *
FROM `products`
    JOIN `products_attributes_values` AS pav1 ON (`pav1`.`product_id` = `products`.`id`)
    JOIN `products_attributes_values` AS pav2 ON (`pav2`.`product_id` = `products`.`id`)
WHERE `category_id` IN ('6', '7', '29', '8', '9', '36')
AND (`pav1`.`attribute_id` = '2' AND `pav1`.`value_id` IN ('4', '5'))
AND (`pav2`.`attribute_id` = '3' AND `pav2`.`value_id` IN ('11', '62'))



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql cập nhật nhiều hàng, mỗi hàng có giá trị riêng, với câu lệnh CASE

  2. cách tạo trình kích hoạt cập nhật để Tăng / Giảm 1 số đến tổng số phiếu bầu

  3. ADDDATE () so với DATE_ADD () trong MySQL:Sự khác biệt là gì?

  4. Cách đặt lại mật khẩu gốc MySQL

  5. Cách hoạt động của toán tử SOUNDS LIKE trong MySQL