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のようなのをやるよりも動きが早くシステム負荷は少ないんだそう。

アウトドア&フィッシング ナチュラム

こちらもどうぞ

まだデータがありません。