Home > 備忘録 > MySQL/SQLite > 逆方向のキーワード検索

逆方向のキーワード検索

渡した文字列の中に、あるカラムのキーワードを持っているレコードを取り出します。
例としては禁止ワードなどのテーブルから、最終的にヒットしたレコードのaction項目を取り出したいと思います。
このままだとちょっと実用できないですが応用で何かに使えるかも・・・?ということで一応メモ。

キーワードテーブル

id matchtype keyword action
1 like 禁止1 block
2 match 禁止2 block
3 like 保留1 reserve
4 like 保留2 reserve

文字列の中に含まれるキーワードをもつレコードを取り出す。

WHERE
 CASE matchtype WHEN 'like'
  -- matchtypeがlikeなら含まれている場合
 THEN '禁止1ワードが含まれた文字列' LIKE CONCAT('%',keyword,'%')
  -- matchtypeがmatchなら完全一致する場合
 ELSE 'この文字には禁止1ワードが入っている' = keyword
END

この例だとID1の「禁止1」のレコードが取り出されます。
前方一致とか後方一致を加えてもいいです。

禁止語句のフィルターなど検索ができますが、インデックスが効かないので長い文字列でどのぐらいコストがかかるかは知りません。キーワードレコード数はともかく、文字列が大きくなると遅くなります。
それにキーワードのマッチングなど大抵の場合は、いちいちDBにアクセスするよりもテキストファイルにキャッシュを吐いておいてそこからPHP側で検索するほうが無難ですが、あとで何かに使えるかもしれないのでry


Edited 2015.06.27 Created 2007.03.05 MySQLPHP

PAGETOP