2009-10-30 53 views

Trả lời

13

Tôi không chắc đó là bất kỳ tốt hơn so với những gì bạn đã đưa ra nhưng bạn có thể sử dụng MySQL's regex capabilities:

select * from my_table where field rlike 'apple|orange'; 

Ngoài ra, như những người khác đã đề cập, bạn có thể sử dụng khả năng MySQL's full text search (nhưng chỉ khi bạn đang sử dụng động cơ MyISAM).

+0

Vâng, có vẻ như cách tiếp cận dễ nhất. Cảm ơn. Hy vọng rằng nó không ảnh hưởng đến hiệu suất nhiều. – serg

+1

@ serg555: Tôi không nghĩ rằng bạn sẽ có được hiệu suất tốt trong cách tiếp cận regex vì sẽ không có chỉ mục nào được sử dụng. Tôi muốn giới thiệu phương pháp tìm kiếm toàn văn. – Asaph

+0

Vâng, nhưng nó cũng có những nhược điểm của nó: chỉ các bảng myisam, chỉ có một ký tự đại diện kết thúc. – serg

1

Có thể giải pháp tốt hơn là sử dụng boolean search against a fulltext index?

EDIT: Tôi nhìn lên và nó chỉ hỗ trợ ký tự đại diện tại cuối các từ:

ALTER TABLE table ADD FULLTEXT INDEX (field); 

SELECT * FROM table WHERE MATCH (field) 
AGAINST ('orange* apple*' IN BOOLEAN MODE); 
0

Trong Oracle, bạn có thể làm:

select * from table where 
regexp_like (column, 'apple|orange', 'i') 

Bạn có thể sử dụng regexp phức tạp hơn. Chữ 'i' làm cho nó không nhạy cảm. Xem Oracle docs

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