データベース初心者で申し訳ないのですが、質問失礼いたします。
googleのような検索結果ページで、検索結果を3件ずつ表示し、改ページ(?)をさせたいと思っております。
【web表示例】
1ページ目
3件表示/20件中表示
+------+------+---+
| name | anime | age |
+------+------+---+
| サザエ | サザエさん | 24 |
| マスオ | サザエさん | 29 |
| タラオ | サザエさん | 3 |
+------+------+---+
1234567 //ページ数へのリンクですが、現在表示されている「1」にはリンクをさせません
※あらかじめLIMITで1~3件、4~6件を表示させるというページを作っているやり方でなく、
検索結果を自動で1ページ、2ページと振り分けてくれるものと考えています。
現在作成しておりますPHP部を、抽出条件など省いてはおりますが下記に表記させていただきました。
<?php
//データベース接続
省略・・・
//検索ワードを取得
$keyword = $_POST['keyword'];
$sql = "SELECT * FROM TABLE1 WHERE '%".$keyword."%' ORDER BY age ";
$result = executeQuery($sql);
//結果セットの行数を取得する
$rows = mysql_num_rows($result);
if($rows){
while($row = mysql_fetch_array($result)) {
$tempHtml .= "<tr>";
$tempHtml .= "<td>".$row["name"]."</td><td>".$row["anime"]."</td><td>".$row["age"]."</td>";
$tempHtml .= "</tr>\n";
}
$msg = $rows."件のデータがあります。";
}else{
$msg = "データがありません。";
}
mysql_free_result($result);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title></title>
</head>
<body>
<?= $msg ?>
<table>
<?= $tempHtml ?>
</table>
</body>
</html>
他HTMLで検索したあと、上記1ページで検索結果を表示しています。
○件ずつ表示・・・というのは、難しいと調べている時にありましたが、
もっと理解してからでないととは思ったのですが必要となり自分なりに調べて試したものだけでは解決にならず質問の方させていただきました。
が、やはり初心者には難しいでしょうか??
ちなみに、調べていて「CGIで・・・」というものも多かったのですが、
検索ページがPHP+MySQLで作られているので、同じものでと考えています。
今使用しているものがPHP+MySQLなので、こちらでできればと思っております。
何卒宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
> 各ページを作って次のページへのリンクを手作業で貼っていくみたいなのがあって、まさか全ページ分作るわけにもいかないので、PHPなら全件数を取得して1ページだけ作れば http://~?page=3 と、各ページが作れるのかなと思っておりまして
さすがにそんなことはしませんね。
# データの件数って変わるもんですし。
パラメータから offset 値を作れればいいので、直接offset値を渡してもいいですし、
ページ番号から生成してもいいと思います。
考え方は同じですのでやってみてください。
offset値がまだ使いこなせていませんが、丁寧なご回答をいただき、かなり理解が深まったと思います!!(自分の中でですが)
ありがとうございました!!
No.1
- 回答日時:
> ※あらかじめLIMITで1~3件、4~6件を表示させるというページを作っているやり方でなく、
> 検索結果を自動で1ページ、2ページと振り分けてくれるものと考えています。
ここが、どういう意味なのかちょっと解らないのですが、普通に LIMIT(, とOFFSET)で作ってますね。
例えば 10 件のデータをページングする場合
1頁目: 1 ~ 3件目表示
2頁目: 4 ~ 6件目表示
3頁目: 7 ~ 9件目表示
4頁目: 10件目表示
と全部で4頁になりますよね。で、それぞれの頁で発行するSQLは
1頁目: SELECT * FROM TABLE1 WHERE anime LIKE '%検索語%' ORDER BY age LIMIT 0, 3;
2頁目: SELECT * FROM TABLE1 WHERE anime LIKE '%検索語%' ORDER BY age LIMIT 3, 3;
3頁目: SELECT * FROM TABLE1 WHERE anime LIKE '%検索語%' ORDER BY age LIMIT 6, 3;
4頁目: SELECT * FROM TABLE1 WHERE anime LIKE '%検索語%' ORDER BY age LIMIT 9, 3;
となりますよね、変わっているのは頁数と、LIMITの最初の数値(offset)ですね。
つまり頁のリンクに対して、offset値をパラメータで渡せば動的につくることができます。
(ページング時に同じ検索をしなければならないので、なんらかの方法で検索語を保持する必要もあります)
頁数は (データ件数 / 表示数) で割り切れなければ + 1です。
この場合は ( 10 / 3 ) + 1 = 4頁(検索条件がない場合)
mysql_num_rows は検索結果のレコード数を返しますが、上記SQLの場合は常に 3以下になってしまうので、別途SQLを投げる必要がありますね。
(MySQLではそうしない方法もあるのですが、まずは基本でしょうね)
これは普通に SELECT COUNT(*) ~ でもいいでしょう
SQLを2発投げることに抵抗があるかもしれませんが、1発で全件取得しても、1頁に10件表示としたら、1000件のデータがあったら 990件無駄になってしまいます。こちらの方が一定したコストなのでまだコントロールしやすいですね。
このロジックでプログラムをしていけば作れると思います。
ソースをカスタマイズしてみたのですが、文字数の都合で貼りつけできなかったので、考え方だけ回答します。
他にも方法はありますが、
- 1頁に表示する件数
- 全体の件数
- 頁数
- offset値
これらの要素で一緒かなと思います。
この回答への補足
>> 検索結果を自動で1ページ、2ページと振り分けてくれるものと考えています。
>ここが、どういう意味なのかちょっと解らないのですが、普通に LIMIT(, と
>OFFSET)で作ってますね。
すみません、
1ページ LIMIT 0, 3;
2ページ LIMIT 3, 3;
3ページ・・・・
と、各ページを作って次のページへのリンクを手作業で貼っていくみたいなのがあって、まさか全ページ分作るわけにもいかないので、PHPなら全件数を取得して1ページだけ作れば http://~?page=3 と、各ページが作れるのかなと思っておりまして
(すみません、ちょっと言葉にしづらいようですっ)
伝わりにくくて申し訳ございませんっ!!
ご回答を元に頑張ってみます!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで[]の使い方について
-
エクセルVBAについて
-
php mysqlで作ったデータをgoog...
-
php テーブルが作成できない
-
htmlとphpの分離
-
WHERE句で一致しない場合を判断...
-
dbに登録したデータをphpのプル...
-
DBで検索結果に該当するデータ...
-
MySQLでデータベースにデータin...
-
実行時エラー3131 FROM 句の構...
-
<VB.NET>INSERT文でDBにデータ...
-
codeigniter 複数モデルでトラ...
-
JAVA SQLServerException 列名 ...
-
phpにて出欠登録管理を作成して...
-
配列に値が入らない
-
ResultSetインターフェイスでの...
-
php データ削除
-
csvファイルのデータをSQLiteに...
-
SQL文2つ実行
-
mysqliを使ってデータベースを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAについて
-
PHPで[]の使い方について
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
dbに登録したデータをphpのプル...
-
phpでmysqlを使ってデータベー...
-
sortable ギブアップです…助け...
-
チェックボックスによる複数の...
-
PHPでMY SQLの連想配列をリンク...
-
checkboxクリック時、SQLを実行...
-
PHPでMySQLデータを呼び出し、w...
-
mysql_fetch_objectの書き方を...
-
SELECT結果から動的にコンボボ...
-
チェックボックスでチェックし...
-
VBA初心者です。
-
PHPについてなのですが未定義の...
-
文字化けが解決できません。お...
-
htmlとphpの分離
-
検索結果をgoogleのように数件...
-
php テーブルが作成できない
おすすめ情報