7月 07
:conditionsにクエリ文字列ごりごり書くなら別に気にしなくてもいいのですが、まぁたいていはインジェクション対策も兼ねてプレースホルダーを使うか、シンボルを使うかのどちらかでは無いでしょうか。
ハセテツは前者です。PHPでもPEARを使っていたので、プレースホルダーを使っていました。
で、Rails(ActiveRecord)でプレースホルダーを利用している状況でLike演算子を使ったあいまい検索はどうしたらよいものか、と意外にシンプルな部分で躓いたりします。キーワード検索機能を実装しない限り、Like演算子って使わないですよね。
:conditions => ["hoge like ?", "%#{hogeParam}%"]
上記の書き方であいまい検索ができました。手抜きではあるのですが、これでhogeParamが空白文字列であっても検索はできます。nilだったらどうしようもないですけどね。
11月 20
ネストしてもいいのですが、可読性が悪かったりパフォーマンスが悪くなったり。
select * from table_0 i
left join table_1 j on i.id = j.id
left join table_2 k on i.id = k.id
つまり、「table_0に対してtable_1とtable_2を結合しまっせ。」ということです。ネストしてないのでとっても読みやすいです。パフォーマンスも、よい気がします(計測しろよというご指摘はごもっともです)。
10月 28
select last_day(date_add(now(), interval -1 month))
まぁなんてことない手法なのですが、なんとなく便利だったので記録。「今日の一ヶ月前の月の末日」っていう意味ですね。
5月 05
select adddate(now(), interval- 3 month);
これで、3ヶ月前の日付が得られる。引数は前から
「基準日、差分、単位」
となっている。
year,day,hour等も利用可能。
5月 05
ずっとMS SQLSERVERかPostgreSQLをメインに使ってたんだけど、最近MySQLに触れることがどんどん増えてきました。まぁ覚えておいて損はないので備忘録に追加。
grant all on DB名.* to ‘ユーザ名’@'%’ identified by ‘パスワード’;
flush privileges;
allは全部できまっせ、という意味。DB名のあとのアスタリスクはワイルドカード。すべてのテーブルに対して、という意味。ユーザ名のあとの「%」はどっからでも、という意味。これを「localhost」としておけば、localhostからの接続しか許可しないようになる。まぁMySQLよりも先にLinuxのFWがあるが。
「flush privileges;」は設定情報を反映させるコマンド。ついついコレを忘れてしまう。
1月 05
select
case
when hoge = 1 then ‘1でした’
when hoge = 2 then ‘2でした’
end as hogecase from hogetable
わかりにくい例ですが、case~endがまぁcaseブロック、when以降が条件、then以降が結果ですね。コレをしらないと、ロジック側でループさせながらぐりぐり判定させないといけないのですが、知っていることによって大幅にロジックを減らせます。
SQLServerやPostgreSQL限定ではなく、SQL-92に載っている手法なので、他のDBでも利用可能です。知っておくべき、活用すべきでしょう。