Yuta Sakurai
sakur****@gmail*****
2008年 6月 19日 (木) 01:19:25 JST
櫻井です。 最終的には、Kenjiさんの出してくれた案のうち、"SELECT ... AS ..."を使って $this->db->select('count(*) as count'); $query = $this->db->getwhere(...); return $query->row()->count; とするようにしました。 ありがとうございました。 天野さん: > count(primary key) でとった方が速いというのをどこかで聞いたことがあり > そうしています。みなさんはどうされていますか? なるほど、その方が速そうな印象がありますね。 僕は現状、kunitsujiさんと同じようにMyISAMでテーブル作って、COUNT(*)で やってます。 MyISAMを知らず、ネットで拾ったSQL文にたまたまついてたので・・・。 といっても、デフォルトではMyISAMになるみたいな話も目にしましたが。 今度、どっちが速いか試してみようかな。 kunitsujiさん: > よくあるのが、LIMITをつけて取得件数を分けてページネーションするのですが、 > そのときに全体の件数をとる特にCOUNTを使いますが(MyISAMとか) > > num_rowの場合はSQLに対しての件数ですから、LIMITで20件だと20ですね。 今回、まさにこの状況でした。 ページネーションでは全体の件数がいくつか指定する必要があるので、モデルク ラスに ・表示させたいデータをLIMIT, OFFSET付きで取ってくる関数 ・それとは別に、表示させたいデータの全ての「件数のみ」を取得する関数 を書いて、コントロールクラスから呼び出すようにしました。 > MySQLのバージョンにもよりますが > SELECT FOUND_ROWS() > を使っているのかとおもいました。 > まあ、num_row()であれば、結果取得に対しての件数だから正しいんでしょうか > ね。 個人的には、その方が直感的に納得できますね。 Kenjiさん: > もっと強気に、メモリを増設して、 > > ini_set("memory_limit","1024M"); > > とかしてみましょう。:-) メモリがどれだけ使えるか等は、各サーバによって異なりそうなので、一応汎用 性を考えて件数のみ取得という方向性でいってみました。 (そんなことを考える時間的余裕は、実のところないはずなんですが笑) -- 名古屋市立大学大学院 経済学研究科 櫻井 雄大 (Y_Sakurai) mail: sakur****@gmail*****