kunitsuji
tsuji****@m-s*****
2008年 6月 18日 (水) 18:32:22 JST
kunitsujiです。 今旬の話題のnum_rowをみてみました。 count(*)でとるのと num_rowでとるのとでは、 検索結果をとるか、条件に合わせたCOUNTを行うかですね。 よくあるのが、LIMITをつけて取得件数を分けてページネーションするのですが、 そのときに全体の件数をとる特にCOUNTを使いますが(MyISAMとか) num_rowの場合はSQLに対しての件数ですから、LIMITで20件だと20ですね。 そう考えると、どういうときにCOUNTをするのかで使い方が変わってきますね。 MySQLのバージョンにもよりますが SELECT FOUND_ROWS() を使っているのかとおもいました。 まあ、num_row()であれば、結果取得に対しての件数だから正しいんでしょうか ね。 どういうときに使うかですね。 >櫻井です。 > >> これ単に PHP の文法の問題ですね。オブジェクトでも >> >> $query->row()->{'count(*)'} >> >> でたぶん取得できるんじゃないかと思います。 > >そういう書き方があるんですねー。 >勉強になります。 > >> ちなみに、メモリを気にしない富豪的なコードは、 >> >> $query = $this->db->getwhere(...); >> return $query->num_rows(); > >コレでいきたかったんですが、 > 「メモリが足りません。全然。」 >とPHPから怒られるので・・・。 >流石に帰ってくるのが1万件オーバーのクエリだと無理があったようです。 >(やっぱりデータベースの設計やSELECT条件が気まずいのかもしれない) > >> 例えば、こんな感じの方がいいのではないかと思います(これは AR >> 使ってないケースですが)。 >> >> $sql = "SELECT count(*) AS count FROM ..."; >> $query = $this->db->query($sql); >> return $query->row()->count; > >こっちのがスマートですね。 >SQL知らない人なので、ASというのを知らなかったorz > >-- > >名古屋市立大学大学院 経済学研究科 >櫻井 雄大 (Y_Sakurai) >mail: sakur****@gmail***** > >_______________________________________________ >Codeigniter-users mailing list >Codei****@lists***** >http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users