FC2ブログ

FuelPHPのpaginationについて

FuelPHPのpaginationについてですが、よくあるサンプルとしては

$count = DB::select()->from('USER')->execute()->count();
$config = array(
"pagination_url" => "sample",
"uri_segment" => 3,
"num_links" => 3,
"per_page" => 10,
"total_items" => $count,
);
Pagination::set_config($config);
$rows = DB::select()->from("USER")
->limit(Pagination::$per_page)
->offset(Pagination::$offset)
->execute()->as_array();
$pagination = Pagination::create_links();

のような感じになっていますが、少し疑問があります。
最初に全体の件数を得るためにクエリを行っていて、その後にPaginationを初期化して
そのoffsetを使って、再度同じクエリをorderbyとlimitとoffsetを与えて実行しています。
よくあるサンプルのようにテーブルのレコード全件をPaginationするというのは
あまりなくて、通常は条件がたくさんあって絞りこまれるはずなので、
検索に時間がかかる場合もあるかもしれません。
それなのに、2回クエリを実行するものばかりサンプルとしてのっているのは、
あまり納得がいきません。みなさんはどうしているんですかね。
MySQLだと

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name

のような書式が使えて、limit,offsetで絞り込まれた行以外に、その制限がない場合の全体の
行数も取得できるようになっていて、WordPressではその機能を使ってページの情報を取得しているので
FuelPHPもそういった機能がないものかと思ってしまいます。

なお、

Pagination::set_config($config);
Pagination::$per_page
Pagination::$offset
$pagination = Pagination::create_links();

の使い方は1.3以前のものらしくて1.5では

$pagination = Pagination::forge('mypagination', $config);
$pagination->per_page
$pagination->offset
$pagination->render()

のような使い方をしないと動きませんでした。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR