類似の文字列または単語について、特定のデータベース テーブルの列をクエリする方法を見つけようとしています。たとえば、文字列がある場合
I have a foo bar in my kitchen
クエリは次のような結果を返します...
foo fighters are a good band
raise the bar
kitchen remodeling contractors
foo bar is a funny word
これは 1 つのクエリで実行できますか?
類似の文字列または単語について、特定のデータベース テーブルの列をクエリする方法を見つけようとしています。たとえば、文字列がある場合
I have a foo bar in my kitchen
クエリは次のような結果を返します...
foo fighters are a good band
raise the bar
kitchen remodeling contractors
foo bar is a funny word
これは 1 つのクエリで実行できますか?
指定されたリスト内の任意の単語に一致させようとしているようです。「OR」演算子を使用します。
例 (テーブルが呼び出されmy_table
、検索している列が であると仮定my_column
):
SELECT * FROM my_table WHERE my_column like '%I%'
OR my_column LIKE '%have%'
OR my_column LIKE '%a%'
OR my_column LIKE '%foo%'
OR my_column LIKE '%bar%'
OR my_column LIKE '%in%'
OR my_column LIKE '%my%'
OR my_column LIKE '%kitchen%';
ただし、ワイルドカードが 2 つあるため、このクエリの実行は非常に遅くなります。http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.htmlを試すこともできます
基本的なレベルでは、列にフルテキスト インデックスを実装する必要があるため (列が col1 でテーブルが tbl であると仮定)、説明したように、kitchenなどalter table tbl add fulltext(col1);
を使用して検索する必要があります。このチュートリアルでは. @WinnieTongの答えに問題はありません。この種のユースケースがまさに全文索引が設計されたものであるというだけです。select id from tbl where match(col1) against 'foo' or match(col1) against 'bar' or match(col1) against
...
mysqlの能力を超えると、人々は一般的にSphinxまたはApache SoLRを使用して検索可能なインデックスを実現します。