2009-10-30 26 views
11

Şunun gibi çalıştırmak istiyorum:"IN" MySQL deyiminde joker karakterler kullanabilir miyim?

select * from table where field in ("%apple%", "%orange%") 

Bir yolu var mı? Ya da en azından, her anahtar kelime için dinamik olarak sorgu oluşturmadan daha iyi bir yol var:

select * from table where field like "%apple%" or field like "%orange%" 

Teşekkürler.

cevap

13

:

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

Ayrıca diğerleri de söylediğim gibi, sen MySQL's full text search yeteneklerini kullanabilirsiniz (ancak yalnızca eğer MyISAM motoru kullanıyorsanız).

+0

Evet, en kolay yaklaşıma benziyor. Teşekkürler. Umarım, performansı çok fazla etkilemez. – serg

+1

@ serg555: İndeks kullanılmayacağı için normal ifadeden iyi performans alacağınızı düşünmüyorum. Tam metin arama yaklaşımını tavsiye ederim. – Asaph

+0

Evet, ama aynı zamanda dezavantajları var: sadece myisam tabloları, sadece bir son joker. – serg

1

Belki daha iyi bir çözüm boolean search against a fulltext index kullanmak olabilir?

DÜZENLEME: baktım ve sadece sonu kelimelerin de destekleyen joker: Ben size geldi ama MySQL's regex capabilities kullanabilirsiniz ne daha iyi olduğundan emin değilim

ALTER TABLE table ADD FULLTEXT INDEX (field); 

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

Oracle, sen yapabilirsiniz:

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

Sen daha karmaşık Regexp'i kullanabilirsiniz. 'I' bunu duyarsız kılar. Bkz. Oracle docs

İlgili konular