逆方向のキーワード検索
渡した文字列の中に、あるカラムのキーワードを持っているレコードを取り出します。
例としては禁止ワードなどのテーブルから、最終的にヒットしたレコードの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