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*****