2009-10-30 4 views
11

Я хотел бы, чтобы запустить что-то вроде:Могу ли я использовать подстановочные знаки в инструкции «IN» MySQL?

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

Есть ли способ? Или, по крайней мере, есть лучший способ, чем динамически строить запрос для каждого ключевого слова:

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

Спасибо.

ответ

13

Я не уверен, что это лучше, чем то, что вы придумали, но вы можете использовать MySQL's regex capabilities:

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

Кроме того, как уже упоминалось, можно использовать MySQL's full text search возможности (но только если вы используете MyISAM двигатель).

+0

Да, выглядит как самый простой подход. Благодарю. Надеюсь, это не сильно повлияет на производительность. – serg

+1

@ serg555: Я не думаю, что вы получите хорошую производительность из подхода регулярного выражения, потому что индекс не будет использоваться. Я бы рекомендовал подход с полным текстовым поиском. – Asaph

+0

Да, но у него также есть свои недостатки: только таблицы myisam, только одноконечные подстановочные знаки. – serg

1

Возможно, лучшим решением было бы использовать boolean search against a fulltext index?

EDIT: Я посмотрел его, и он поддерживает только символы на конце слов:

ALTER TABLE table ADD FULLTEXT INDEX (field); 

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

В Oracle, вы можете сделать:

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

Вы можете использовать более сложное регулярному_выражение. «I» делает его нечувствительным. См. Oracle docs