タイトル、著者、テキストの 3 つのフィールドでキーワード検索を作成しようとしています。関連性で並べ替えたいので、いずれかの分野で一致した場合に 1 ポイントを与えます。また、ストーリーの特定のタグを各行に格納する、tags というテーブルもあります。タグが一致した場合は、そのタグが使用された回数を関連性に追加します。ユーザーが検索を入力するとき、一連のキーワードを入力することがあります。文字列を分解し、for ループを使用してキーワードごとに以下の select ステートメントのコードを追加することを考えていました。これはかなり複雑に思えるので、これを行うより良い方法があるかどうか疑問に思っていましたか?
select text, ((case when S.sid in (select sid from tags where tahname like 'db')
then (select uses from tags T where S.sid = T.sid and tagname like 'db') +
(case when title like '%db%' then 1 else 0 end) +
(case when author like '%db%' then 1 else 0 end) +
(case when text like '%db%' then 1 else 0 end)) as relevance
from stories S
order by relevance desc
ありがとうございました。