商品のテーブルがあり、その中で登録しているカラム「商品の高さ」を"0cm〜30cmまで"みたいな検索を実装したかった。
普通に考えたらこんな感じ。
mysql> select * from items where height between '0' and '30';
しかし、その昔の仕様の際は「cm」と単位が入っていて、カラムの型がvarchar
でした。なので、検索ができない事態に陥る。
さて、困った。
でも調べたらすぐわかりました。
castしてあげればおk
mysql> select * from items where cast(height as unsigned) between '0' and '300';
ちなみに、実装したのはCakePHP側だったので、下記のように修正
<?php ... 'conditions' => [ '(Item.height as unsigned) BETWEEN ? AND ?' => $heightQueryArray // [0, 30] な感じで配列が入っている ] ...
めでたしめでた。。。
と、思ったけど、やっぱりカラムの型を修正しました。こういうのって後回しにしていると後が怖いからね。
$ alter table items modify column height integer;