• ベストアンサー

DBから抜き取ったデータを10レコードずつ表示する方法

データベース(MySQL)にデータを置きPHPでデータを表示しています。 しかしデータが大量になってしまったので10レコードずつ表示したいと思っています。各レコードにはauto_incrementなどで番号などの目印はつけていません。 この場合、引数で?page=1とした場合、はじめのレコードから10番目のレコードを表示し、page=2となれば11番目から21番目のレコード....といった感じにするにはどうしたらよいのでしょうか?可能なのでしょうか? よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • Jirorian
  • ベストアンサー率58% (7/12)
回答No.1

単純にMySQLでLIMITすればいいんじゃないでしょうか? $kaishi = (intval($_GET['page']) - 1)*10; $result=mysql_query("SELECT * FROM TABLE ORDER BY id LIMIT $kaishi, 10"); こんな感じでいいと思いますが・・・。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_10.htm
itmedia_search
質問者

補足

回答ありがとうございます。 ORDER BY id LIMIT の idとはいったい何なのでしょうか?よろしくお願いいたします。

その他の回答 (1)

  • Jirorian
  • ベストアンサー率58% (7/12)
回答No.2

idとはORDER BYするテーブルの要素で、あくまで一例として書いただけです。意味はないです。 idの代わりにあなたの使っているテーブルの要素で昇順にしたいものを入れてください。

itmedia_search
質問者

お礼

なるほど、ありがとうございました。

関連するQ&A

  • <<前 次>> というリンクを表示させる方法

    リスト表をPHPで作成しています。すべてのデータはMySQLに置き毎回呼び出す形になっています。又、auto_incrementで各レコードに1からの番号がうってあります。 しかし10レコード毎に表示させることができません。できればauto_incrementでうってある番号順に1~10のレコードを表示し、それ以上を見るために 次へ といったリンクを表示し11~20までのレコードを表示することはできるでしょうか?

    • ベストアンサー
    • PHP
  • もっとも新しいレコードから検索する方法

    MySQLにデータを登録しており、PHPにてWebサイトにデータを表示しています。SQLはSELECT * FROM TABLE WHERE .... なんですが、この場合一番初めのレコードから順に表示されてしまうため、古いデータがはじめに、新しいデータが最後尾に表示されてしまいます。 これを解消するため最後尾のレコードから検索するにはどうしたらよいのでしょうか?又、カテゴリが異なってしまいますが、PHPでもっとよい方法などございましたらお願いします。

    • ベストアンサー
    • MySQL
  • オートインクリメントの削除方法について

    mysqlとphpでデータベースを作成しているのですが、オートインクリメントを用いたデータベースのデータを削除する方法がわかりません。 いい方法やいいサイトがありましたら教えてください。

  • MYSQLのレコードを上書きしたいのですが…

    phpからMYSQL5に接続して以下のようなデータベースを作りました。 no name comment ←カラム名 1  山田 起きる 2  山田 叫ぶ 3  山田 寝る これを上書きして、 no name comment 1  山田 食べる 2  山田 遊ぶ 3  山田 寝る というようにレコードを更新したいのです。 しかし、どうやっても1、2、3の後に4、5、6と続いてしまいます。 「no」カラムにはauto_increment+primary keyを設定しています。 phpで構文を送る前に mysql_query("alter table db1 auto_increment=0"); を設定してみたり、 mysql_query("insert into db1 (name,comment) value ('山田','$comment')"); や mysql_query("replace into db1 (name,comment) value ('山田','$comment')"); を試してみましたが、上手く行きませんでした。 現在は、 mysql_query("delete from db1"); mysql_query("alter table db1 auto_increment=0"); ---php処理--- mysql_query("insert into db1 (name,comment) value ('山田','$comment')"); というように、二度目の書き込みを行う前に一旦テーブル内のレコードを すべて削除して書きなおすという方法を取っています。 しかし、数が多くなると一旦削除する作業を行うと処理が遅くなってしまうと思いますので、上書きしてデータベースを更新したいと思っているのですが、どのようにすればよいでしょうか?

    • ベストアンサー
    • MySQL
  • レコード表示の分割

    phpとmysqlでデータベースを作成しているのですが、 表示のときある一定上のレコードを表示すると 次のページに自動でリンクをはるようにしたいのですが。 つまり、掲示板のように古い記事は、どんどん後ろに追いやられ、新しい記事から順に 5個ずつぐらいで表示したいのです。 沢山のデータを一ページに、全部表示すると見にくいため、数個ずつにページを分割したいです。 どのようなプログラムを組めば良いでしょうか?

    • 締切済み
    • PHP
  • MySQLのレコードを逆向きに並べる方法は?

    MySQLのレコードを逆向きに並べる方法は? MySQLを使って、掲示板を作ろうとしているのですが、 “db1”というデータベースに、“tbk”というテーブルを作り、 “bangou”というフィールドで、AUTO_INCREMENTで番号をふり、 下記のように、番号順にレコードをプリントしているのですが、 <?php $s=mysql_connect("localhost","root","パスワード"); mysql_select_db("db1"); $re=mysql_query("select * from tbk order by bangou"); while($kekka=mysql_fetch_array($re)){ print "<hr />"; print $kekka[0]; print "<br />"; print $kekka[1]; print "<br />"; print $kekka[2]; print "<br />"; print $kekka[3]; print "<br />"; } mysql_close($s); ?> このように、番号の若い順にレコードをプリントするのではなく、 番号(“bangou”)の古い順にレコードをプリントするようにするには、 どうすれば良いでしょうか?

  • MySQLにデータを登録した後、すぐ直前のデータを読み込む方法は?

    お世話になっております。 PHPでデータベースを作成しています。 同じページの中にデータをデータベースへ登録し、すぐ直後にauto_incrementの値を読み込み、変数にセットしたいのですが、うーーーん・・・ってな具合です。。 データは何でもいいのですが、主キーはauto_incrementにしています。(例:現在、100件データを入れている状態で、新規にデータを登録します。ID(主キー)は101になります。そのデータを登録した直後にこのIDの値101を取り出したいのです。) すみませんが、よろしくお願いいたします!!

    • ベストアンサー
    • MySQL
  • <前 次> のようなリンクを見やすく表示

    データベース(MySQL)にデータを保存し、そのデータを見やすく表示するスクリプトを作成しているのですが、データの量が多いため以下のように10レコードづつ表示しています。 $page = ceil($CountRe/10); for ($i=1;$i<= $page;$i++){ echo "<a href=\"./db_show.php?number=".$i."\">".$i."</a>"; } しかしこの場合だと100レコードあれば <a href="?id=1">1</a>から<a href="?id=10">10</a>までのリンクが表示されます。これが1000レコードの場合、100までなのでこれをどうにか短くして表示したいと思っています。 簡単にはGoogleの検索のように 例えば8ページ目を表示している場合、 下5件、上5件までを表示したいので 3 4 5 6 7 8 9 10 11 12 13 のような感じで、レコード数が 10000でもリンクは短く表示できるようにするにはどうすればいいのでしょうか? Pearなどの外部ファイルを使用しない方法でお願いいたします。

    • ベストアンサー
    • PHP
  • AUTO_INCREMENTについて教えてください

    ■質問1 PHPを使ってMySQLに接続しているのですが、 「AUTO_INCREMENT」指定しているIDの次の値を取得したいのですが、 どうすれば良いでしょうか? 用途としては、レコードを挿入する際、画像ファイルにレコードID名を付与したパスをつけたいのです。 <やりたいこと> 1.AUTO_INCREMENT指定しているIDの次の値を取得 2.画像ファイル名に付与 3.レコード挿入 この1を、どうやるか知りたいです ■質問2 「AUTO_INCREMENT」指定はどこに保存されているのでしょうか? 例えばレコードを削除した後、新たにデータ挿入する場合、 次の「AUTO_INCREMENT」値ではなく、削除した一番若い番号を利用することは可能でしょうか? ■質問3 質問2に関連しているのですが、DUMPデータを移行した際など、次の「AUTO_INCREMENT」値も新しいDBへ引き継がれるのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLでデータ表示

    MySQLでデータの表示を行っています 10件ずつ表示し、11件からは2ページ目に表示したいです サイトや本を見ながらデータ表示と次の10件のリンクは表示されるよう自力で頑張ったのですが 次の10件を押してもデータが変わらず1件目から10件目のままです どこが違うか教えてもらえますか。 どうコードを入力するか教えてくれたらありがたいです 一覧 ta2.phpです <html> <body> <form action = "ta2.php" method="GET"> <input type="hidden" name="page" value="0"> </form> <?php //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test" ; $sql.= " limit " . $page*10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>"; while($row = mysql_fetch_array($res)) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td></tr>"; header('content-type: text/html; charset="utf-8"'); if ($_GET) { // データがGETされていたら $page = isset($_GET['page']) ? $_GET['page'] : ''; // 取得 } } $sql = "select count(*) from tbl_test " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ; //前の10件 if ($page != 0) { echo "<a href = ta2.php?page= $page>" ; echo "&lt 前の10件" ; } //次の10件 if (($page + 1)*10 < $cnt) { echo "<a href = ta2.php?page= $page>" ; echo " 次の10件 " ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </table> </body> </html>

    • ベストアンサー
    • MySQL

専門家に質問してみよう