勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

MySQLでカラム内容によって条件分岐させたい

   

MySQLでカラムの内容によって条件を分岐させたかった。またPHPで処理するのではなくMySQL文で完結させたかった。調べてみるとCASE文というのが使えそうだったので使い方と検証のメモ。

 

検証内容

楽天やamazonで買い物をし、その際にポイントが発生したとする。このポイントを性別や購入ジャンル、サイトによって以下の通り増加する。

男性→ポイント1.1倍

女性→ポイント1.2倍

amazonでdrinkを購入→1.2倍

amazonでfoodを購入→1.5倍

楽天でdrinkを購入→1.3倍

楽天でfoodを購入→1.6倍

最終的に性別毎の合計ポイントを算出したい。

 

テーブルの作成

以下テーブルを作成した。

idは通し番号、 pointは発生したポイント、sexは0が男性で1が女性、siteは購入サイト、genreは購入ジャンル、ymdは購入日とする。

 

適当にデータを作成する。作成後は以下の通り。

 

また、この時点での合計ポイントは以下の通り。

 

CASE文を使ってみる

まずは男性→1.1倍、女性1.2倍を算出してみる。SQL文と結果は以下の通り。

最初よく分からなかったけどCASE後のカラムが○○だった場合××に置き換えるみたいな形っぽい。上記だとsexカラムが0だった場合1.1に置き換えて、その前のpointと掛け算するという形。

さらにサイトと購入ジャンルで分岐させたい場合は入れ子にして使う。以下の通り。

凄く分かりづらい。CASEでsiteがamazonだった場合で尚且つgenreがdrinkだった場合は1.2倍、foodだった場合は1.5倍という形になる。

 

リファレンス

https://dev.mysql.com/doc/refman/5.6/ja/case.html

 

その他

分かりづらいけど使い道は多そう。Where句とかは普通に追加して検索できる。

 - MySQL

  関連記事

msyql-image
MySQLのクエリキャッシュ設定

以前クエリキャッシュを設定していたけど、 これだとmysqlを再起動した時に再度 ...

msyql-image
文字コードのutf8_general_ciとutf8_unicode_ciの違い

MySQLで設定する時に使っているサーバーによってデフォルトの文字コードがutf ...

msyql-image
MySQLでJOINの高速化

JOINで無茶苦茶悩んだのでメモ。やりたかった事は、MySQLで テーブルAには ...

msyql-image
phpMyAdminやAdminer上だけ文字化け

レンタルサーバーのプログラムでWebページ上では文字化けしていないのに、phpM ...

msyql-image
MySQLのUNION

$sql_1 = "SELECT name_a,name_b FROM tabl ...

msyql-image
MySQLでREGEXPについて

SQL文にREGEXPというのを見てこれ何? となったのでメモ。 ■参考サイト ...

msyql-image
MySQLでテーブルとデータの複製(コピー)

MySQLでテーブルとデータを複製したかった。ダンプとかではなく、簡単なSQL文 ...

msyql-image
MySQLでIPを整数値としてカラムに格納する

MySQLでIPを整数値としてカラムに格納しているケースがあった。今までIPが必 ...

images
エラー管理まとめ

■エラーログをとる。 error_reporting(E_ALL ^ E_NOT ...

msyql-image
ランダム表示のページング

MySQLからデータを持ってくる際に、 ランダムな表示を行ってほしいと言われた。 ...