【SQL】CASE文の活用

ある案件で、検索結果をカラムに優先順位付けて表示させたいという要望があった。

 

純粋にその順番に一つずつ検索して配列に追加していこうとしたけれど、それは回りくどいと考えた。

 

その結果 CASE 文を使って、カラムに優先順位を付ける事にした。

 

SELECT name,
CASE
 WHEN name LIKE '%AA%' THEN 1
 WHEN description LIKE '%AA%' THEN 2
 WHEN notes LIKE '%AA%' THEN 3
END AS rank
FROM hoge
WHERE (name LIKE '%AA%' OR description LIKE '%AA%' OR notes LIKE '%AA%' OR keywords[1] LIKE '%AA%' OR keywords[2] LIKE '%AA%' OR keywords[3] LIKE '%AA%' OR keywords[4] LIKE '%AA%' OR keywords[5] LIKE '%AA%') ORDER BY rank asc;

 

name が一致したら1番目、description は2番目、notes は3番目というように。

これで、rank 順に ORDER BY すれば良い。