MySQLでSELECTする時に。1列だけならSELECT * FROM table WHERE LIKE col ‘%var%’ って風に曖昧検索出来るけど、一般的な検索バーのように空白で区切るAnd曖昧検索をやりたくて色々考えてみた。

結果としては、何の面白みもないが、SELECT * FROM table WHERE (col1 LIKE ‘%var1%’ OR col2 LIKE ‘%var1%’ OR col3 LIKE ‘%var1%’) AND (col1 LIKE ‘%var2%’ OR col2 LIKE ‘%var2%’ OR col3 LIKE ‘%var2%’)….となった。

検索文字列はC#のsplitで空要素無しで配列化し、forでWHEREの中身を作るようにした。

一応SQLインジェクション対策に、forで”@var”+iのようにしておいて、後からfor使ってパラメータ当てていく方が安全。

本当はもっと良い方法がありそうなもんだけどなぁ。

 

ちなみに、LIKEの要素を反対にしたらいけるかと一瞬思ったけど、完全一致検索になってしまった。

例:SELECT * FROM table WHERE “検索文” LIKE CONCAT(‘\’%’,col,’%\”)