重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

はじめまして。PHPとMySQLとPEARのPagerを使った質問なのですが、過去レス等を参考にしながらやってみました。
「form.html」から社員の年齢の最低と最高を入力し、それを「search.php」にgetで渡し、ヒットしたデータの名前と年齢を表示したいのです。
データが多いのでページを1ページに何件かずつ分けて表示したいのですが、「Pager」を使ったやりかたを以下のように書いてみました。
どうしても「Pager」を使ってやってみたいのですが、うまくいきません。

MySQL には(id ,name ,age の3カラムのデータが格納されています)

form.html----------------------------------

<html>
<head>
<title>社員の名前と年齢について</title>
</head>
<body>
<form method="get" action="search.php">
<input type="text" name="age_min"> 歳 ~ <input type="text" name="age_max" > 歳
<input type="submit" name="submit" value="検索">
</form>
</body>
</html>
----------------------------------------------
search.php---------------------------------------

<html>
<head>
<title>社員の名前と年齢について</title>
</head>
<body>
<?
//ここから http://oshiete1.goo.ne.jp/qa4155006.htmlを参考
$search="";
$age_min=$_REQUEST["age_min"];
$age_max=$_REQUEST["age_max"];
if(is_numeric($age_min) and is_numeric($age_max)) $search.=($search==""?"":"&")."age_min={$age_min}&age_max={$age_max}";
//ここまで http://oshiete1.goo.ne.jp/qa4155006.htmlを参考

//DB接続
require_once ('Pager/Pager.php');
$conn = mysql_connect ("サーバー名", "ユーザー名", "パスワード")
or die ('接続できませんでした');
mysql_select_db ("search",$conn);

//MySQLのクライアントの文字コードをsjisに設定
mysql_query("SET NAMES sjis")
or die("can not SET NAMES sjis");

$sql_1= mysql_query("select count(*) as max from search where age between '$age_min' and '$age_max'");

$row1 = mysql_fetch_array($sql_1);

if($row1[max] == 0) $message = "該当者なし";
else $message = $row1["max"] . "人ヒット";
$row1_max = $row1["max"];
echo "検索結果<br>";
echo "$message";

$sql_2= mysql_query("select name,age from search where age between '$age_min' and '$age_max'");

$row2 = mysql_fetch_array($sql_2);


//Pagerの導入
$params = array(
'itemData' => $row2,
'mode' => 'Jumping',
'perPage' => 10,
'delta' => 6,
'totalItems' => $row1_max
);

//Pagerのインスタンスを生成
$pager = & Pager::factory($params);
$links = $pager->getLinks();
$data = $pager->getPageData();
$c_pager = $pager->getCurrentPageID();
$e_pager= $pager->numPages();

print $data["all"];
print $links["all"];
?>
</body>
</html>
-------------------------------------------------------------------
ページ分割しなければ、「Pager」を使わずに、上のデータ表示箇所を

while($row2 = mysql_fetch_array($sql_2)){
echo "<table border='1' cellpadding='0' cellspacing='0'>";
echo "<tr>";
echo "<td>".$row2["name"]."</td>";
echo "<td>".$row2['age']."</td>";
echo "</tr>";
echo "</table>";
}

みたいな感じで書き換えればうまく表示されるのですが、「Pager」を使う場合は
$data = $pager->getPageData();
でページのデータを返してくれると書いてあったもので、使ってみました。おそらく、

(1)'itemData' => $row2,
(2)$data = $pager->getPageData();
(3)print $data["all"];

の3箇所あたりがおかしいかと思っております。どうかよろしくお願いします。

A 回答 (4件)

>'perPage' => 10,と指定したので、LIMITの代用になっているかと。


仮に100件データを取得しても実際に使うのはそのうち10件。
90件分のデータが無駄になる。
これがまだ100程度だといいけど、この数が数千件などに増えたらさらに無駄が増える。
君が、参考にしている質問もしっかりとlimitを利用している。

この回答への補足

補足日時:2010/03/16 17:03
    • good
    • 0
この回答へのお礼

お礼日時:-0001/11/30 00:00

ページング処理をするなら最初からLIMITを利用する。


PEAR::Pagerはページングのリンクの処理だけに専念させる。
元々使い道が違う機能。

この回答への補足

補足日時:2010/03/16 06:55
    • good
    • 0
この回答へのお礼

お礼日時:-0001/11/30 00:00

俺自身が「LIMIT」ってヒントを出しているんだからそれから調べれば答えは自ずと見つかる。


この回答への補足

 

補足日時:2010/03/19 06:56
    • good
    • 0
この回答へのお礼

 

お礼日時:-0001/11/30 00:00

ページ処理を導入するのに


SQLの方でLIMIT使わないのは?

この回答への補足

doran357様、ありがとうございます。
>SQLの方でLIMIT使わないのは?

表示するレコード数は「Pager」の$params の中で
'perPage' => 10,と指定したので、LIMITの代用になっているかと勝手な解釈をしたのですが。よろしくお願いします。

補足日時:2010/03/12 18:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!