みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

MySQLからのデータをページに10件ずつ表示したい

はじめて質問させて頂きます。今回質問する内容に類似した質問が過去にかなりの件数がありましたが、どうしても解らず質問させて頂く事をお許し願います。
「名前のキーワード」と「年齢の幅」を入力するフォームから成る「form.html」とそのデータを受け取る「search.php」があります。
「search.php」は「名前」と「年齢」のデータが500件ほど格納されているデータベース名「database」からデータを取ってきて、10件ごとに表示をしたいのですが、うまく表示されません。私が書いた「form.html」と「search.php」は以下の通りです。

「form.html」----------------------------
<html>
<head>
<title>名前と年齢を検索するフォーム</title>
</head>
<body>
<form method="post" action="search.php">
<input type="text" name="name">
<input type="text" name="age_min"> 歳 ~ <input type="text" name="age_max" > 歳
<input type="submit" name="submit" value="検索">
</form>
</body>
</html>
----------------------------------------

「search.php」(SELECT文に名前には「あいまい検索」を、年齢には「BETWEEN」を使っています)---------------------------------

<?
if (isset($_GET['pos'])){
$offset = $_GET['pos'];
} else {
$offset = 0;
}
$ln = 10;

//DB接続
$conn = mysql_pconnect ("localhost", "username", "password")
or die ('接続できませんでした');
mysql_select_db ("database",$conn);

//クエリ生成
$sql = "select name,age from search where name like '%$name%' and age between '$age_min' and '$age_max' limit $offset,$ln";

$res = mysql_query($sql);
$num_rows = mysql_num_rows($res);

if($num_rows == 0) $message = "該当するデータはありません";
else $message = $num_rows . "件ヒットしました";

echo "検索結果<br>";
echo "$message";

//SELECTで取得したレコードを出力
while($row = mysql_fetch_array($res)){
echo "<table border='1' cellpadding='0' cellspacing='0'>";
echo "<tr>";
echo "<td>".$row[name]."</td>";
echo "<td>".$row[age]."</td>";
echo "</tr>";
echo "</table>";
}

//[前へ]リンクの設定
$next_pos = $offset-$ln;
if ($next_pos >= 0) {
echo("<a href= ".$_SERVER['PHP_SELF']."?pos=$next_pos>[前へ]</a>");
}

//[次へ]リンクの設定
$next_pos =$offset+$ln;
$sql = "select * from search where name like '%$name%' and price between '$price_min' and '$price_max' limit $next_pos,$ln";
$res =mysql_query($sql);
if (mysql_num_rows($res) > 0) {
echo("<a href= ".$_SERVER['PHP_SELF']."?pos=$next_pos>[次ヘ]</a><br>");
}
?>
----------------------------------------------------------------
うまく表示されないというのは具体的に言いますと、例えば 検索結果が何百件あると想定される場合でも、いつも「10件ヒットしました」と表示され、その上[次ヘ]をクリックしても「該当するデータはありません」と表示されてしまいます。ちなみにエラー等は出ません。私が書いた上のコードは私なりに色々な参考ページを参照してのものなのですが。
どなたか、上のコードでおかしい箇所などご指摘頂けましたら、幸いでございます。どうぞアドバイスの程よろしくお願い致します。

投稿日時 - 2008-07-06 10:10:58

QNo.4154984

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>いつも「10件ヒットしました」と表示され
limit で件数を絞っているので当然の結果でしょう。
一度 $sql = "select count(*) from search where name like '%$name%' and age between '$age_min' and '$age_max' で件数を調べてから,あたなの考えるSQL文をやればよいのではないでしょうか?

投稿日時 - 2008-07-06 10:28:43

補足

NNori様、ありがとうございます。
>一度 $sql = "select count(*) from search where name like '%$name%' and age between '$age_min' and '$age_max' で件数を調べてから,あたなの考えるSQL文をやればよいのではないでしょうか?

具体的に、私のコードのどこに
$sql = "select count(*) from search where name like '%$name%' and age between '$age_min' and '$age_max'
を入れればよいのでしょうか?
あと「limit」を使ったSQL文はどの位置に書けばよいのでしょうか?
すみませんが、具体的コードでお示し頂けませんでしょうか?よろしくお願いします。
(訂正)
テーブル名は「search」で
58行目は
$sql = "select name,age from search where name like '%$name%' and price between '$age_min' and '$age_max' limit $next_pos,$ln";
です。

投稿日時 - 2008-07-06 11:43:02

あなたにオススメの質問