読者です 読者をやめる 読者になる 読者になる

49hack

見習いエンジニアが魔法使いになるまで

mysqlで同一単語を複数カラムにわたって検索する

CONCAT関数を使います。 例えばcolA, colBの2つのカラムでaaaを検索したい場合、

SELECT * FROM hoge_table where CONCAT(colA, colB) = "aaa"

となります。

ただ、colA, colBのいずれかがNULLの場合、CONCATの結果もNULLになってしまうのでIFNULLで回避します。

SELECT * FROM hoge_table where CONCAT(IFNULL(colA,''), IFNULL(colB,'')) = "aaa"

ちなみに

Ransackで書く場合にも使えるので便利です。

   ransacker :col_a_b do |parent|
        Arel.sql("CONCAT(IFNULL(colA,''),'/',IFNULL(colB,''))")
    end

参考