2

複数の値に一致する列 (テキスト) を選択するクエリを生成しようとしています。

例: id と description の 2 つの列があります。最初の行に値を持つ説明列が含まれているとします

Google はウェブサイトであり、素晴らしい検索エンジンです

、説明列の値を含む 2 行目

Amazonのウェブサイトは素晴らしいeコマースストアです

クエリを作成しました

Select * from table_name where description REGEXP 'Website \| 探す'

それは両方の行、つまりグーグルとアマゾンの両方を返しますが、ウェブサイト検索の両方の単語を含む行が必要なため、グーグルのみを返したいです。また、一致する単語の数も固定されていません。基本的に私が作成しているクエリ検索ドロップダウン用です

渡されるすべての単語が列に存在する必要があります。列に存在する単語の順序は重要ではありません。regex を使用する以外に他のより良いオプションがある場合は、指摘してください。

編集: 渡される単語の数は動的で不明です。ユーザーは追加の単語を渡して、列と照合することができます。ストアドプロシージャ内でクエリを使用します

4

1 に答える 1

1

パフォーマンスの観点から、正規表現ソリューションがあなたにとって良いとは思わないでください。全文検索を探すべきだと思います。

具体的には、テーブル定義で次のようなものを使用して全文インデックスを作成する必要があります。

create table testTable
(
Id int auto_increment not null,
TextCol varchar(500)
fulltext(TextCol)
); 

次に、クエリが簡単になります。

select * from testTable where Match(TextCol) against ('web') 
AND Match(TextCol) against ('server')

FULLTEXT マッチングに関する MySQL ドキュメントを読むことを強くお勧めします。このタスクに役立つ小さなトリックや機能がたくさんあります (上記のクエリをより効率的に実行する方法を含む)。

編集:おそらくブールモードは、次のような簡単な解決策に役立ちます:

Match(textCol) against ('web+ Server+' in boolean mode)

あなたがしなければならないのは、に対して文字列を構築することだけなので、動的SQLなしでSPでこれを行うことができると思います

于 2010-10-01T11:09:50.757 に答える