2009-10-30 15 views
11

Chciałbym uruchomić coś takiego:Czy mogę używać symboli wieloznacznych w wyrażeniu "IN" MySQL?

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

Czy jest jakiś sposób? Lub przynajmniej istnieje lepszy sposób niż dynamiczne budowanie zapytania dla każdego słowa kluczowego:

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

Dzięki.

Odpowiedz

13

nie jestem pewien, że jest lepiej niż to, co wymyślił, ale można użyć MySQL's regex capabilities:

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

Ponadto, jak wspominają inni, można użyć MySQL's full text search możliwości (ale tylko jeśli używasz silnik MyISAM).

+0

Tak, wygląda na najprostszy sposób. Dzięki. Mam nadzieję, że nie wpłynie to zbytnio na wydajność. – serg

+1

@ serg555: Nie sądzę, że uzyskasz dobrą wydajność z podejścia regex, ponieważ nie będzie używany indeks. Polecam metodę wyszukiwania pełnotekstowego. – Asaph

+0

Tak, ale ma również swoje wady: tylko tabele myisam, tylko jeden znak końcowy. – serg

1

Może lepszym rozwiązaniem byłoby użycie boolean search against a fulltext index?

EDIT: Sprawdziłem to i obsługuje tylko znaki zastępcze na końcu słów:

ALTER TABLE table ADD FULLTEXT INDEX (field); 

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

W Oracle, można zrobić:

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

Można użyć bardziej skomplikowanego wyrażenia regularnego. "I" sprawia, że ​​jest niewrażliwy. Zobacz Oracle docs

Powiązane problemy