• 締切済み

検索結果の重み付け

以下のようなテーブルがあったとして、 カラムA  名前 | カラムB  住所 横谷      | 横浜市 横山      | 谷町 横井      | 宇都宮市 WEBの検索のように複数の単語にて検索をかけるとき、 例えば「横」 「谷」 のワードで検索された時に 該当するものが多い順に 1,横谷 2,横山 3、横井 の順で sqlにてorder by するにはどのような方法がありますか?

みんなの回答

noname#212058
noname#212058
回答No.1

例えば、以下のような式でフィールドに含まれる「文字」の数を数えることができます。 (CHAR_LENGTH([列名]) - CHAR_LENGTH(REPLACE([列名], '文字', ''))) / CHAR_LENGTH('文字') これを応用すれば、「横」「谷」の数を数えて、その内容で ORDER BY することができるでしょう。 ORDER BY  (CHAR_LENGTH([列名]) - CHAR_LENGTH(REPLACE([列名], '横', '')) + (CHAR_LENGTH([列名]) - CHAR_LENGTH(REPLACE([列名], '谷', '')) ただ、この方法は計算量が多くなるので、検索対象のデータ量が多いと実用的なパフォーマンスが出ない可能性があります。あしからず。

muuming2001
質問者

お礼

なるほどー アイディアありがとうございます。

関連するQ&A