4

私はキーワード検索を備えた PHP インターフェイスを持っており、Keywords フィールドを持つ DB(MySQL) を操作しています。

キーワード フィールドを設定する方法は次のとおりです。これは、以下に示すようにすべての単語がフォーマットされた varchar です...

the、there、theyre、their、thermal など...

検索から正確な単語「the」を返したい場合、これはどのように達成されますか?

'the%'PHP でandを使用しようとしましたが、キーワードが表示されるすべて'%the'の行が返されないため、機能しません。

これを行うためのより良い(より正確な)方法はありますか?

ありがとう

4

5 に答える 5

1

キーワードを正確に含む行を選択する場合the:

SELECT * FROM テーブル WHERE キーワード = 'the'

キーワードが含まれる行を選択する場合は、次のようにしthe ます

SELECT * FROM テーブル WHERE キーワード LIKE '%the%'

キーワードで始まる行を選択する場合the:

SELECT * FROM テーブル WHERE キーワード LIKE 'the%'

キーワードで終わる行を選択する場合the:

SELECT * FROM テーブル WHERE キーワード LIKE '%the'

于 2012-11-05T16:39:26.553 に答える
1

これを試して

SELECT * FROM tablename
  WHERE fieldname REGEXP '[[:<:]]test[[:>:]]'

[[:<:]]および[[:>:]]は単語境界のマーカーです。

MySQL の正規表現

于 2012-11-05T16:39:46.343 に答える
1

コンマも検索すると、単語全体を取得していることを確認できます。

where keywordField like '%, the, %'
   or keywordField like '%, the'
   or keywordField like 'the, %'
于 2012-11-05T16:40:07.693 に答える
0

列内で1対多の関係が発生しているようです。キーワードごとに個別のテーブルを作成し、キーワードごとに1つの行を作成し、検索対象の外部キーを作成することをお勧めします。

DBはインデックスを使用できないため、テーブル全体をスキャンするため、「%???%」のようにすることは一般的に悪い考えです。これが重要かどうかは、使用しているデータのサイズによって異なりますが、事前に検討する価値があります。DBのパフォーマンスを向上させる唯一の最善の方法は、初期テーブルの設計です。これは後で変更するのが難しい場合があります。

于 2012-11-05T16:51:51.497 に答える
0

たぶん私は質問を正しく理解していませんでした...しかし、「the」が表示されるすべての単語が必要な場合は、LIKE '%word%' が機能するはずです。

単語の DB が巨大な場合、MySQL はいくつかの単語の取得に失敗する可能性があります。これは 2 つの方法で解決できます...

1-より大きなサイズをサポートするDBを取得します(これを選択する人はあまりいません)。たとえば、SQL Server には、LIKE '%word%' よりも適切に機能する 'CONTAINS' 関数があります。

2- 逆索引検索を使用する外部検索ツールを使用します。プロジェクトにSphinxを使用しましたが、非常にうまく機能します。これは、検索対象のデータの行をめったに UPDATE しない場合に適しています。たとえば、Sphinx は MySQL テーブルからファイルを生成し、このファイルを使用して検索を解決します (非常に高速です)。テーブルで挿入または更新を行うたびに、このファイルのインデックスを再作成する必要があります。新しい行を更新または挿入することはめったにありません。

于 2012-11-05T16:40:59.783 に答える