0

検索したいタイトルとキーワードの列を含むテーブルがあります。複数語検索を使用する機能を追加したいのですが、結果を関連性でソートする必要があります。現在MySQL5.5とinnoDBを使用しているため、FullTextSearchはオプションではありません。

私の現在のアプローチは次のとおりです。

  1. すべての用語を個別に検索し、一致する ID を php 配列に保存します。
  2. すべての用語を検索したら、id の出現回数をカウントし、それに応じて並べ替えます。

私が今疑問に思っているのは、主にphpを使用しているため、より効率的な方法があるかどうかです。データベースでこの処理の一部を行う必要がありますか? アプローチを大幅に変更する必要がありますか?

テーブルは比較的小さく (10k レコード未満)、近い将来にこれほど大きくなるとは考えていません。

助言がありますか?ありがとう。

4

1 に答える 1

2

SQLでカウントできます。以下に例を示します。

select ((col like 'term1') +
        (col like 'term2') +
         . . .
        (col like 'termN')
       ) as NumMatches
from t
having NumMatches > 0
order by NumMatches desc;

MySQL はブール値を 0 (偽) および 1 (真) として扱います。それらを合計して、一致の総数を取得できます。

于 2013-08-14T03:14:14.590 に答える