Giải pháp 1:
Như @Jens đã nhận xét, đó là một thiết kế DB tồi để lưu trữ các giá trị dưới dạng CSV. Vì vậy, giải pháp đầu tiên là thay đổi thiết kế DB của bạn vì tôi thực sự không biết bạn đang lưu trữ những gì và mục đích của DB / mã của tôi là gì. không thể viết một lược đồ hoặc đưa ra bất kỳ đề xuất có ý nghĩa nào.
Giải pháp 2:
Sử dụng find_in_set
chức năng.
SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)
Giải pháp 3:
Bạn có thể sử dụng LIKE
nhà điều hành. (Một số thành viên có thể sẽ giết tôi vì đề xuất nó, nhưng nếu bạn không muốn thay đổi thiết kế DB của mình - đây là một tùy chọn sáng tạo).
Hãy kiểm tra đoạn mã sau:
SELECT id FROM table WHERE filter_data LIKE '%2,%'
Vấn đề là nó sẽ trả về id của một trường có 22,
trong cột của filter_data. Do đó, bạn sẽ phải thay đổi dữ liệu trong cột đó sao cho ,
cũng sẽ xuất hiện dưới dạng ký tự đầu tiên và cuối cùng. Ví dụ:
id | filter_data |
---|---------------
1 |,2,3,45,67,4, |
2 |,2,3,55,33,5,7,|
Và bây giờ bạn có thể làm như sau:
SELECT id FROM table WHERE filter_data LIKE '%,2,%'
Nếu bạn có nhiều "bộ lọc tìm kiếm", bạn có thể kết hợp LIKE
s bằng HOẶC
nhà điều hành.