俺の報告

RoomClipを運営するエンジニアの日報(多分)です。

日報 #44 - 今日はじめて知ったわ

いや…間に合いそうにないスケジュール感で動いております。
頑張って追いつくようにしておりますが、
難しいもんですね。

さて今日の気付き。
もう当たり前のことでも皆様にご報告させていただきます。
http://dev.mysql.com/doc/refman/5.1-olh/ja/user-variables.html
もうここで全部書かれていることなので、
価値のない記事になりますが、無駄に再掲。

ビジネスサイドからクエリを求められることは結構あります。
そんな時出来るだけ汎用にクエリを書いておくことは重要です。
するとSETによる変数利用が効果的ですね。

基本的なSETの利用方法は楽です。

SET @var='hoge';

こんな感じです。
よく使う方法はWHERE句の条件を変数化しておくと、
ビジネスサイドの利用幅もグッと広がります。

  
#######################
## ここで変数セットして実行してね
#######################
SET @birth_date='1985-01-01';

#######################
## 実行クエリ
#######################
SELECT count(id)
FROM hoge_tbl
WHERE birth_date > "@birth_date";

ですが、
この変数はカラム名指定には使えないようです。

SELECT @birth_date FROM hoge_tbl

これをやってもエラーです。
でもカラム名を変数化したいシーンは結構あります。
これを解決するために、静的プレースホルダが使うプリペアドステートメントを使います。

#########################################
## column names
#########################################
SET @column="column_A";

#########################################
## distribution
#########################################
SET @query=CONCAT("SELECT ",
@column,
", count(`id`) AS count FROM hoge_table GROUP BY ",
@column);

PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

こうすればカラム名を指定したクエリを書くことが出来ます。
いろいろな項目で分布を見たい時は便利に使えます。
MySQLは素直なやつですね。

っていうかね、
もう10ヶ月禁煙しているんだけど、
忙しいと半端じゃないわこれ、もうなんていうか、
えぇーってなるね!