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

Truy vấn MySQL để tìm kiếm nhiều thuộc tính và value_id

Có vẻ như bạn cần sử dụng GROUP BYHAVING mệnh đề.

SELECT
    `product_id`,
    COUNT (`primary_key_id`) AS `attr_count` /* primary key field here */
FROM `products_attr_val`
WHERE
   (`attr_id` = ? AND `value_id` = ?)
   OR (`attr_id` = ? AND `value_id` = ?)
   /* additional as necessary
   OR (`attr_id` = ? AND `value_id` = ?)
   */
GROUP BY `product_id`
HAVING `attr_count` = ? /* value here should be equal to number of attributes you are checking for */

Đảm bảo rằng bạn có một chỉ mục duy nhất trên product_idattr_id để điều này hoạt động bình thường (bạn nên có điều này vì sẽ không hợp lý nếu một sản phẩm có nhiều bản ghi với cùng một attr_id ).

Bạn cũng cần đảm bảo rằng bạn đang thoát các giá trị của mình để sử dụng trong SQL nếu bạn chưa thoát. Tôi đang hiển thị các biến này ở đây với ? mà, nếu bạn sử dụng các trạng thái đã chuẩn bị, sẽ là một cách bạn có thể viết SQL này.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cú pháp trình giữ chỗ Python MySQLdb

  2. SQL chỉ chọn các hàng có giá trị tối đa trên một cột

  3. Ví dụ về UNIX_TIMESTAMP () - MySQL

  4. Sao chép / đồng bộ hóa db Firebird cục bộ sang db trực tuyến

  5. Khắc phục “ERROR 1222 (21000):Các câu lệnh SELECT đã sử dụng có một số cột khác nhau” khi sử dụng UNION trong MySQL