PHP+MySQLでページ分けするメモ

mysql php

PHP+MySQLで作っているシステムで、表示件数ごとにページ分けするときに困ったのでメモ。

例えば、1ページ10レコードずつ表示する場合、クエリーを↓のような感じにする。(1ページ目の場合)

クエリー1:
$result = mysql_query("SELECT * FROM `mygoods` LIMIT 10",$link);

これで表示する分のレコードを取得できるけど、ページ分けするには”LIMITがなかった場合に表示対象が何件あるか”がわからないと、正しくページ分けができない。

ので、新たに、

クエリー2:
$num = mysql_query("SELECT `id` FROM `mygoods`",$link);

とかやって、LIMIT無し版のクエリーも送信・・・っていうのがすごくめんどくさいし非効率だし複数条件になった場合に超ややこしいしでどうにかなんないのか!ともって調べて見たら良い方法がありました。

クエリー1を

$result = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM `mygoods`",$link);

とやっておきます。

そんでもってそのすぐ後に

$num = mysql_query("SELECT found_rows()",$link);
list($num) = mysql_fetch_row($num);

ってやると、$numにLIMIT無しのときに取得できるレコード数が格納されるってわけです。

これならクエリー1を書き換えるだけで臨機応変に表示すべきページ数を変更できるし便利。
いちいちクエリー2のようなのをやるよりも動きが早くシステム負荷は少ないんだそう。

mysql, php」カテゴリの人気記事

  • 畑に咲いてた [PHP][MySQL]UPDATEの実行結果や該当数を取得確認する関数を作ってみた 59 views
  • PHP+MySQLでページ分けするメモ 15 views
  • アウトドア&フィッシング ナチュラム

    こちらもどうぞ

  • iTunesで購入した音楽が認証・再生できないときの対処方法
  • [PHP]preg_replaceで正規表現を使った置換+後方参照のメモ
  • セローにフォグランプPIAA MLSE1を付けたのでレビュー
  • 寒いと火がつかないなんて時のためにキャンプで使うガス缶の種類について調べてみた
  • セローの次のタイヤを考える会