10/10/2018, 10:23
Vấn đề tìm kiếm trong mysql
Mình có 1 table có cái column mang nội dung sau:
1,5,6,8 <== row 1
5,11,2,3 <== row 2
Vậy bây giờ mình có 1 là danh mục bán hàng, 11 là công nghệ thông tin khi mà $_GET có nội dung là 1 thì nó liệt kê ra row 1 và ngược lại nếu = 11 thì là row 2.
Còn 5 thì show ra cả row 1 và 2! Ai giúp mình với
1,5,6,8 <== row 1
5,11,2,3 <== row 2
Vậy bây giờ mình có 1 là danh mục bán hàng, 11 là công nghệ thông tin khi mà $_GET có nội dung là 1 thì nó liệt kê ra row 1 và ngược lại nếu = 11 thì là row 2.
Còn 5 thì show ra cả row 1 và 2! Ai giúp mình với
Bài liên quan
Mách bạn một kinh nghiệm, nếu thiết kế DB kiểu này bạn nên cân đối các chuỗi cho nó cùng độ dài (fixed length).
Ví dụ, row 1 của bạn thay vì 1,5,6,8 thì bạn nên sửa thành 01,05,06,08, row 2 là 05,11,02,03
Khi đó chỉ cần sử dụng LIKE %01% hoặc LIKE %11%, sẽ giải quyết dễ dàng hơn
Tìm kiếm thì không nên so sánh bằng thôi, chứ chuỗi sao lại không thể so sánh bằng đc.
where `field` like '$value,%' or `field` like '%,$value' or `field` like '%,$value,%' or `field` = '$value'
Sau đó đã fix bằng cách lưu theo kiểu
01:05:08:011: => bất kỳ ID nào sau trước khi lưu vào DB phải thêm số 0 đằng trước và : đằng sau. Rồi gộp tất cả nó lại => save
Sau đó dùng like '%011:%' la` ok => như này không cần fix độ dài như bạn Dương đã nói.
Như vậy khi lọc category thì mới ra kết quả chính xác.
Nếu hiện trạng Data của bạn đã như vậy rồi thì vô phương cứu chữa.
Chỉ còn một cách viết 1 đoạn mã nhỏ thiết lập lại format của field đó. rồi sửa lại đoạn code lọc dữ liệu.