2011-03-17 29 views
6

Tôi có một bảng có sử dụng một datatype SET cho một trong những lĩnh vực, và để kiểm tra xem trường có chứa một yếu tố cụ thể tôi sử dụngmysql ĐÂU SET datatype chứa mục

SELECT * FROM table WHERE myset LIKE %value%; 

này hoạt động hầu hết thời gian, nhưng hai trong số các giá trị tiềm năng có cùng một từ, tức là một phần tử có thể có trong tập hợp là Poodle và một phần tử khác là Toy Poodle. Nếu tôi làm

SELECT * FROM table WHERE myset LIKE %Poodle%; 

Nó trả về tất cả các hàng có Poodle hoặc Toy Poodle. Tôi muốn nó chỉ trả lại nếu trường có chứa Poodle. Nếu tôi xóa các ký tự đại diện thì nó sẽ chỉ trả lại các hàng có CHỈ Poodle. Vì vậy, về cơ bản, nếu bảng là:

id | myset 
------------------------- 
1 | "Poodle" 
2 | "Toy Poodle" 
3 | "Poodle","Toy Poodle" 
4 | "Toy Poodle","Poodle" 

Tôi cần một câu lệnh chọn sẽ trả về 1,3 và 4 nhưng không phải 2. Có thể thực hiện điều này không?

Trả lời

11

Bạn cần phải làm: SELECT * FROM table WHERE FIND_IN_SET('Poodle',myset)>0 như mô tả trong documentation

+0

Không chắc chắn làm thế nào tôi bỏ qua điều đó ... cảm thấy một chút ngu ngốc bây giờ. Đó là nơi tôi nhận được thông tin để sử dụng LIKE% ...%, chỉ bằng cách nào đó đã bỏ lỡ phần FIND_IN_SET – awestover89

+0

bây giờ tôi biết. vui mừng thêm một bộ kiến ​​thức khác vào bộ nhớ cơ sở dữ liệu của tôi – reignsly

1
SELECT * FROM table WHERE FIND_IN_SET('"Poddle"', myset) > 0 

tìm kiếm " sẽ là quan trọng để loại bỏ kỷ lụC# 2

0

xin lỗi nếu tôi hoàn toàn bị mất điểm ở đây, nhưng là trích dẫn trong resultset của bạn thực sự được lưu trữ trong db?

những gì tôi có nghĩa là, không giá trị thực tế của hàng đầu tiên bằng ...

"Poodle" 

... hoặc bạn đã chỉ trích dẫn những giá trị này cho các mục đích trình bày, trong trường hợp giá trị đầu tiên sẽ thực sự được ...

Poodle 

chỉ lý do tôi hỏi là, tại sao không chỉ làm một truy vấn như ...

SELECT * FROM table WHERE myset LIKE '%"Poodle"%'; 

Ấp ologies nếu tôi đã ồ ạt bỏ lỡ điểm hoặc quá đơn giản vượt ra ngoài điểm công nhận.

chúc may mắn với bản sửa lỗi!

+1

không, dấu ngoặc kép không được lưu trong DB Tôi chỉ sử dụng chúng để trình bày trong câu hỏi để biểu thị rằng mỗi giá trị có thể là – awestover89

+0

riêng biệt. là Poodle, Toy Poodle – BizNuge

Các vấn đề liên quan