達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
前に「」とか「Head First SQL 頭とからだで覚えるSQLの基本」とか読んで、SQL面白い、集合なんだっていうあたりをもっと知りたい、と思って買ってあったんだけど、なかなか読む時間なくて。
そうこうするうちに仕事でやたらややこしいSQL組まなきゃいけなくなって、慌てて読んだ。読んだと言っても最初の方と最後の方だけだけどね(^^;
この1週間毎日あーでもこーでもとやってたのは、この本の内容で言うと、
「1-1 CASE式のススメ」の「異なる条件の集計を1つのSQLで行う」ってやつ。
pref_name |sex|population
--------------------------
徳島 |1 | 60
--------------------------
徳島 |2 | 40
--------------------------
香川 |1 | 100
--------------------------
香川 |2 | 100
--------------------------
こういう表を
県名 |男 |女
--------------------------
徳島 |60 | 40
--------------------------
香川 |100| 100
--------------------------
というように集計して、「行待ち」から「列待ち」に水平展開しましょう、というもの。
書き方は、
SELECT pref_name,
SUM( CASE WHEN sex = '1' THEN population ELSE 0 END) AS cnt_m,
SUM( CASE WHEN sex = '2' THEN population ELSE 0 END) AS cnt_f
FROM PopTbl2
GROUP BY pref_name;
となっていて、
WHERE句で条件分岐させるのは素人のやること。プロはSELECT句で分岐させる。だそうで。
なるほどと思ったのでこの水平展開を延々とやってたんだが、ふと思った。
これってこの例では男と女の二つだけだからいいが、これがなんかの分類とかで可変要素で、しかも10も20もあったらどうすんの? と。
実際私が仕事で書いたSQLには真ん中のSUM( CASE WHEN ・・・が30行くらい並んでて、書いてしまってから、しかし、なんだこりゃと(笑)。
結局、
SELECT pref_name, sex, SUM( population )
FROM PopTbl2
GROUP BY pref_name, sex;
として出てきた結果をハッシュにして処理することにした。ま、確かに水平展開するとあたかもエクセルで処理してるかのように見やすい結果が出てくるけど、perlとかPHPから処理する時はかえって処理しづらい。
あ〜やっぱりこの作者はSQL頭の人なんだなあ〜と実感できました。
その他NULL撲滅委員会とか、プログラミング作法とか、いろいろためになる話が後ろの方に載ってて、なかなか実行はできないとは思いますが、がんばってやっていこうと思いました。
また時間を見て、コアな部分は読み直します。
翔泳社
売り上げランキング: 17742

初心者から脱出したい人向け
SQLの可能性を垣間見たLearning Perl
一応perl5.10対応ってことみたいです。
先日の「WEB+DB PRESS 総集編 [Vol.1~36]」で紹介されている記事を参考に、今風にperlで書くにはどうすりゃいいのか、と日々悶々としてる訳ですが、まあそれ以前に基本がなってない。「WEB+DB PRESS 総集編 [Vol.1~36]」の記事のソースが理解できない、ってことでそういう時の参考書として購入。
例えばchompとかね。最後の改行をとってくれるんだろ、という理解だから、
chomp($text = <STDIN>);
とかって書かれると途端に分からなくなる。
あとevalなんかもそうだよね。
eval { $barney = $fred / $dino };
print "An error occurred: $@" if $@;
とか。いきなりサンプルソースに出てこられる。しかもperl使いにとっては当たり前のことなので何の解説もない。ということでやっぱり手元に一冊は必要なんじゃないですかね。
こういう書き方もあるし、こういう書き方もあるけど、普通のプログラマーはこう書くよ、とかそういう説明が載ってるのでとてもよい本だと思います。
何故そうなのか、何故こう動作するのかということとかも書いてあるしね。読み物として読んでも面白い。発見があるし、飽きない。
ま、結局は自分でソース書かないとおぼえないね。
Oreilly & Associates Inc
売り上げランキング: 9856

素晴らしきPerlの世界への案内
読み物としても十分面白い
定番書
初心者も持っておきたい一冊
CGI言語としてのPerlBeginning Perl Web Development: From Novice to Professional
オライリーの本もいいんだけど、perlはperlであってCGIではないので、さあ書くぞって段になってどう書くかなあ、と考え出すと書け出せない、というのがあり、なんかこう、肩を押してくれるような本はないものかと思ってね。買ってみた。
やー、まあ日本語の本だったらあるのかもしれないが、今年になって買った「達人に学ぶPerl/CGI道場」も「すぐわかる オブジェクト指向 Perl」もCGIはCGI.pmで、ということでテンプレート使ってないのでどうも実務には使えなくて。
なんかいい本ないすか、まじで。
第12章のThe Template Toolkitから読み始める。PHPのSmartyみたいに使う予定でいたんだけど、これ読むとTemplate Toolkitって、ほとんどCMSだ(^^;
テンプレの中で変数に値をセットしたり(配列も)、definedとかlengthとかのmethodを使ったり、ループや、IF-ELSEとか使ったり、CGIモジュールを使えばCGI.pmがそのまま使え、DBIモジュールを使えば、データベースも操作でき、で、しかも、テンプレとサイト全体の設定ファイルを用意して、ttreeってコマンドを打つと、一気にhtmlとして生成してくれる。ページの追加はテンプレを追加するだけ。
ひえーって感じ。
バッチで動かせばそのまんまCMSじゃん。もうさすがにいなくなったけど、検索エンジン対策で静的なHTMLで作ってくれ、っつーお客さんにも楽勝で対応できる(笑)。
しかも下手をすればなんちゃら.cgiとかってperlのスクリプトを書く必要もなく、テンプレだけでOK。
んなバカな。。。
取り急ぎ、そういう使い方する予定はないんだけどな。
その他、第3章Database and Perlを流し読みして終わり。後は書く時に読む。
mysqlのinsertidの取り出し方の説明で、
my $insertid = $dbh->{'mysql_insertid'};
print "$insertid\n";
In this case, the output from each run should increment, assuming that no one else is inserting data into the table at the same time!
とかって書いてあるんだけど、大丈夫なんでしょうか、この本!
Apress
売り上げランキング: 357912
jQuery in Action
この数週間私を苦しめた苦行の元。
jQuery、とタイトルに明確についてる本ってまだ少ないんだけど、日本で出てるやつはどう見てもデザイナー向けの、即コピペすれば使えます的な(笑)、全く応用がききそうもない本ばかりなので、やっぱ洋書かなってことでひとまずこれにしてみた。
これもamazonの.comで買ったけど、.co.jpとの価格差はすごいよ。
いやーしかしくじけたね。第2章セレクタ、第3章属性の操作(みたいの)あたりまでは楽勝、おれがやりたいこととはあんま関係ないね、なんて思って読み飛ばしてたんだけど、第4章になってお目当てのフォーム要素をいじって変化させるってののサンプルが出てきて目が点。だってこんなのだよ。
$(function(){
$('fieldset div div').hide();
$(':checkbox').click(function(){
var checked = this.checked;
$('div',$(this).parents('div:first'))
.css('display',checked ? 'block':'none');
$('input[type=text]',$(this).parents('div:first'))
.attr('disabled',!checked)
.css('color',checked ? 'black' : '#f0f0f0')
.val(1)
.change()
.each(function(){ if (checked) this.focus(); });
});
$('span[price] input[type=text]').change(function(){
$('~ span:first',this).text(
$(this).val() *
$(this).parents("span[price]:first").attr('price')
);
});
$('span[price] input[type=text]').change();
});
壮絶。なんだこりゃーって感じ。もう一回最初のセレクタから何回も勉強しなおして、1週間くらいかかってやっと理解できた。
セレクタを制すものはjQueryを制す、という感じでしょうか。
まーでもね、
$('div img')
$('div, img')
$('img', 'div')
が全部違うって言われてもねえ。。。なんだこりゃですよねえ。。。笑うしかない?
ただ「jQuery」間違いなくこれは強力です。普通のJavascriptで7〜8行で書いてたスクリプトがたったの1行で書けました。HTML側は全く汚れません。すばらしいです。
泣きながらでも勉強する価値はあります。
セレクタ、とにかくセレクタ。デザイナ(っていうかコーダーか)には変な構造作るなよって話もあるけどね。まあそれはしょうがないし。
Manning Pubns Co
売り上げランキング: 26679
Firefox 3 Hacks Mozillaテクノロジ徹底活用テクニック
ということではあるが、なにはともあれ、このところずーっとjQueryの勉強してて、いざ書き始めるとデバッグ環境がないと話にならなくて。
Firebug入れるかあ、ってことになったんだけど、使い方がさっぱり分からんので買ってみた。
ま、他にGreasemonkeyの記事もあったし、なによりFirefox3ではクッキーとかbookmarkがSQLiteで管理されてる、という驚愕の事実が書いてあったので即買い。
なんで2800円もするんだと、レジで大いに憤慨したけど(笑)。
読んでみたら別にFirefox3のSQLiteで何ができるって訳でもなかったけどね。ID=1から順に記録が残ってるのがなんか嬉しかったかも。
Greasemonkeyもこんなもんかあ、って感じだったし。(amazonの検索結果に図書館の検索結果を重ねて出したりできる)
や、もちろんFirebugはバリバリ使ってますよ。これないと無理、絶対。
あとは、結局、載ってたおもしろそうなアドオン入れてみたってくらいですかね。
Context Search
Firebug
SearchWP
Selenium IDE
SQLite Manager
入れたのはこれくらい。そうそう、ついでなので、こないだの「WEB+DB PRESS 総集編 [Vol.1~36]」も読み直して、Selenium IDEの使い方も覚えた。とりあえずSelenium IDEだけで十分かなという感じ。
オライリージャパン
売り上げランキング: 54970







