SQLを覚えよう::CASE式の使い方
- May 27th, 2013
SQLには、switch文のように条件を書き分ける事が出来る、CASE式なるものがあるという事なので、試しに使ってみたので忘れないようメモしておきます。
参考サイト
下記のような「item」テーブルが存在した場合の、CASE式を使ったSELECT文とUPDATE文のサンプルコードをメモ。
id | name | price | ranking |
---|---|---|---|
1 | りんご | 200 | 4 |
2 | ゴリラ | 2000000 | 99 |
3 | ラッパ | 30000 | 5 |
4 | パンダ | 15000000 | 2 |
5 | ダニ | 1 | 99 |
6 | にぼし | 5 | 1 |
7 | シリコン | 8500 | 3 |
`price`の大きさに応じて変化する、`flag`カラムを追加したデータを取得するSQL
<?php $sql = 'SELECT `id`,`name`,`price`,`ranking`,' . 'CASE' . ' WHEN `price` <= 10 THEN 1' . ' WHEN `price` > 10 AND `price` <= 100 THEN 2' . ' WHEN `price` > 100 AND `price` <= 1000 THEN 3' . ' WHEN `price` > 1000 AND `price` <= 10000 THEN 4' . ' WHEN `price` > 10000 THEN 5' . ' ELSE 0 END `flag` FROM `item`'; ?>
特定のID以外の`ranking`に99を代入にして更新するSQL
<?php $sql = 'UPDATE `item` SET' . ' `ranking` = CASE' . ' WHEN `id` = 1 THEN 1' // りんご . ' WHEN `id` = 6 THEN 2' // にぼし . ' WHEN `id` = 3 THEN 3' // ラッパ . ' WHEN `id` = 4 THEN 4' // パンダ . ' WHEN `id` = 7 THEN 5' // シリコン . ' ELSE 99 END' . ' WHERE `price` > 0'; ?>
- May 27th, 2013