日報 #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ヶ月禁煙しているんだけど、
忙しいと半端じゃないわこれ、もうなんていうか、
えぇーってなるね!