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

PHP:Tìm kiếm cơ sở dữ liệu mysql bằng cách sử dụng nhiều danh sách thả xuống được chọn?

$clause = " OR ";//Change  to OR after 1st WHERE

Toán tử OR ở trên sẽ tạo ra tiêu chí where của bạn để chọn bản ghi ngay cả khi 1 từ khóa phù hợp với trường attr. Thay đổi nó thành "VÀ" để mong đợi tất cả các từ khóa áp dụng.

Hơn nữa, tiêu chí ... AND ATTRIBUTES.sub_cat_name ='$ currentproduct' "dường như áp dụng cho tất cả các từ khóa, vì vậy tiêu chí này nên được thêm một lần, không phải ở mỗi lần lặp lại của vòng lặp. $ Currentproduct =$ _POST ['product']; hàng cũng phải được di chuyển trong vòng lặp.

CHỈNH SỬA:để phản ánh việc thay đổi bộ tạo quang thành VÀ và không có bất kỳ hàng nào được trả lại.

...ATTRIBUTES.attr LIKE BINARY '$c'...

Nếu không có ký tự đại diện nào trong $ c, thì tiêu chí trên sẽ yêu cầu từ phải khớp với trường attr như thể toán tử =đã được sử dụng, điều này khó có thể xảy ra. Các ký tự đại diện phải được đưa vào tìm kiếm:'% $ c%'

Thêm vào đó, một số biện pháp bảo vệ khỏi tiêm sql cũng sẽ rất tốt.

EDIT2:Nếu mỗi thuộc tính được lưu trữ trong bản ghi của chính nó, thì nó sẽ phức tạp hóa mọi thứ một chút, vì nơi tiêu chí được đánh giá dựa trên một bản ghi duy nhất, không phải một bộ sưu tập của chúng.

Tôi sẽ cung cấp cho bạn một lệnh chọn mẫu, nhưng bạn sẽ phải kết hợp nó vào mã php của mình.

select product_details.* FROM product_details INNER JOIN
    (select product_details.id, count(ATTRIBUTES.id) as total
     FROM `product_details`
     INNER JOIN `ATTRIBUTES` ON product_details.id=ATTRIBUTES.id
     WHERE ATTRIBUTES.attr in (...)
     GROUP BY product_details.id
     HAVING total=...) as t
on t.id=product_details.id

Truy vấn con đếm có bao nhiêu thuộc tính được so khớp cho một sản phẩm và loại bỏ những thuộc tính đó, trong đó số lượng không bằng số lượng thông số được gửi qua biểu mẫu. Truy vấn bên ngoài lấy chi tiết sản phẩm cho những thứ đó, nơi số lượng phù hợp.

Đối với ... trong mệnh đề in (), bạn cần cung cấp danh sách các từ khóa được phân tách bằng dấu phẩy, 'kèm theo, như:"' computer ',' apple '". Sử dụng hàm implode () trong ghép nối php và sztring để nhận kết quả.

Đối với ... trong mệnh đề có, hãy thay thế số lượng từ khóa trong mảng $ _POST ['keyword'] (mặc dù vậy, bạn nên kiểm tra mã xem đó là một mảng hay chỉ một giá trị).

Tuy nhiên, bạn nên xem xét tác động của việc tiêm sql lên mã của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để kết nối an toàn với cơ sở dữ liệu google bằng cách sử dụng ip công cộng (0.0.0.0)?

  2. Làm cách nào để tăng độ dài khóa trong MySQL 5.1?

  3. xoay trong các truy vấn mysql

  4. MYSQL tự động chèn tệp csv từ thư mục bằng mysqlimport

  5. Cách chuyển đổi IPv6 từ nhị phân để lưu trữ trong MySQL