Perl DBIを使ってフィールドデータを取り出す時はこんな書き方してるんだけど、これってめちゃ低速らしいんだな。
while (my $hashRef = $sth->fetchrow_hashref() ) {
print $hashRef->{"id"};
print $hashRef->{"title"};
print $hashRef->{"content"};
}
やるんなら、fecthrow_arrayrefを使って、$ref->[0]...で取り出すらしい。この方が高速なんだと。こういう点もPerlが嫌な理由。オレ、やっぱ、Perl向いてないや。HAHA歯!
Posted by nohohon at 2004年11月29日 19:45 | TrackBackHashにキーと列番号が入ってると考えていいんですかね。
だとしたら、別途列番号を持つオブジェクトを作れば、
列インデックスで値が取り出せるんじゃないでしょか。
突然、
$hashRef->{"id"}
して取り出したフィールド値がどのオブジェクトにも属さない様に成り易いPerlが気持ち悪いですね。
俺は敢えて、$refを引数にしてnewするモデルを別途定義し中で、
$this->name = $ref->[$table->idx_name];
の様な事をしたくなります。
Posted by: token at 2004年11月29日 20:14フェッチする場合、配列のリファレンス、配列、ハッシュの3種類があるようですね。
1.fetchrow_arrayref(高速)
フィールドの値を保持している配列をダイレクトに参照。
2.fetchrow_array(普通)
新たな配列に格納した後にその配列から取得
3.fetchrow_hashref(低速)
新たなハッシュに格納してそのハッシュから取得
DBIの解説を読む限りではfetchrow_arrayも問題ないとありますが、やはり高速なarrayrefを選ぶべきなんでしょうね。うちの学校の先生はfetchrow_hashrefを思いっきり使ってましたが・・・。自分もそっちの方がしっくりきます。列番号ってしっくりきませんし・・・。うぅ〜難しいですね。
Posted by: nohohon at 2004年11月30日 16:52どれくらいの規模で高速感を味わえるんでしょうね。
そこが解らないと、hashrefの存在意義が問われてしまいます。
列番号で取得する利点は、
列名に依存しない取得ロジックが書ける事だと思いますよ。
飽くまで、同じ構造を持ったテーブルやDBだけど意味的な扱いが違う場合でしか利用できなさそうですが・・。
PHP5徹底攻略
SQLiteを中心に解説。
オブジェクト指向の解説はあまりなし。
まるごとPHP
日本初のPHPの専門誌
WEB+DB PRESS Vol.22
WEB+DB PRESSの22号.
特集のデザインパターンは必読
PHP実践のツボ...実践のツボシリーズ
セキュアなPHPサイトの構築
セッションをDBに保存する方法など
PHP BALCK BOOK
PHP4の文法書。
BLACK BOOKシリーズ
エッセンシャルJava 2nd edition
JAVAでオブジェクト指向をきっちり学びたい人にオススメです。
コンピュータは、むずかしすぎて使えない
ペルソナという仮想ユーザーを用いたデザイン手法の紹介
明解JSP&Servletプログラミング...
サーバーサイドJAVAの徹底解説。簡単なMVCの解説など
Web情報アーキテクチャ―最適...
ワイヤーフレームを用いた設計手法
使いやすいWebサイトの構築