新着順に表示するシンプルな掲示板を作成したい!

このQ&Aのポイント
  • プログラム初心者の私が作成したシンプルな掲示板では、新しく書き込まれたスレッドをトップページに表示することを目指しています。
  • 掲示板では、bbsテーブルに書き込まれた行番号を付けてデータをインサートしています。
  • トップページ(index.php)では、bbsテーブルのカラムから最新の書き込みを20件程度表示する予定です。
回答を見る
  • ベストアンサー

新着順に表示

プログラム初心者です シンプルな掲示板をつくりました ホームページのトップページに新しく書き込まれたスレッドを表示したいです 状況を説明します bbsに書き込まれたらbbsテーブルに行番号を付けてどんどんインサートしていくようにしてます トップページはindex.phpです index.php(トップページ) mysqli(手続き型)のカラム bbsテーブル id (オートインクリメントでつけた行番号) bbs_id (タイトルごとのid。これでタイトルごとにまとめています) title スレタイトル mes 書き込まれた文章 name 書いた人の名前 time 型はdatetimeです(書き込まれた日付) 例えば、下記のように書き込まれたら 新しい書き込みがbbs番号3番のスレが2013-09-10 12:10:00 新しい書き込みがbbs番号5番のスレが2013-09-10 12:00:00 だとしたら 3番のスレへのリンク 5番のスレへのリンク のようにトップにスレへのリンクを書き込みが新しい順に20くらい表示したいです よろしくお願いします

  • flash0
  • お礼率97% (297/306)
  • MySQL
  • 回答数1
  • ありがとう数13

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

質問としては、新規の書込みがあったスレッドの上位20件を取り出すSQLが知りたい、という事で良いでしょうか? そうであれば、 bbs_id 毎の最新の time を比較して、その新しい順に並べ、上位20件分の bbs_id を取得すれば良いかと。 SELECT bbs_id, MAX(time) FROM bbs GROUP BY bbs_id ORDER BY MAX(time) DESC LIMIT 20; ※ bbs_id はタイトルごとのIDとなっていますが、タイトル=スレッドの様なので、スレッドを表す番号と仮定しています。

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/select.html
flash0
質問者

お礼

回答ありがとうございます おかげさまでなんとかできました!ありがとうございます

関連するQ&A

  • 新着表示

    プログラム初心者です シンプルな掲示板をつくりました ホームページのトップページに新しく書き込まれたスレッドを表示したいです bbsに書き込まれたらbbsテーブルに行番号を付けてどんどんインサートしていくようにしてます トップページはindex.phpです id (オートインクリメントでつけた行番号) sure_id (タイトルごとのid。これでタイトルごとにまとめています) mes 書き込まれた文章 name 書いた人の名前 time 型はdatetimeです(書き込まれた日付) bbs番号3番のスレ 2番目の書き込み 2013-09-12←これが新着で取得したい値 1番目の書き込み 2013-09-10←なぜかこちらを取得してしまう 下記のようにindex.phpで表示したいです bbs番号3番のスレが2013-09-12 しかしやってみたら新着順にはなるものの3番目のレスの古いほうから値を取得していました SELECT * FROM bbs GROUP BY sure_id ORDER BY MAX(time) DESC LIMIT 1,10 bbs番号3番のスレが2013-09-10 bbs番号5番のスレが2013-09-11 bbs番号6番のスレが2013-09-09 こうなるようにしたいです bbs番号3番のスレが2013-09-12 ←最新の書き込まれたスレッドのなかから一番新しい日付を表示したい bbs番号5番のスレが2013-09-11 bbs番号6番のスレが2013-09-09 よろしくお願いします

    • ベストアンサー
    • MySQL
  • 置換えについて

    php初心者です php ver 5.2.5 簡単な掲示板を作りたいと思っています しかし、引用の置換えがわかりませんでした やりたいことは>>の記号のあとに番号を入れるとそのログへのリンクを表示されるようにしたいです 下記の場合は >>7 こんな感じに置換えたいです <a href="bbs.php">&gt;&gt;7</a> 実際のコメントを表示するところは下記のようになっています <?php print(nl2br(htmlspecialchars($table['mes'], ENT_QUOTES))); ?> よろしくおねがいします

    • ベストアンサー
    • PHP
  • 「mysqli_fetch_assoc」で、プリペ

    「mysqli_fetch_assoc」で、プリペアドステートしたいのですが、「mysqli_stmt_fetch」との違いなどがよく分かりません。 下記リンク先、「test4.php」のコードを、「mysqli」手続き型用に書き換えていただけないでしょうか? ▽データの取得(SELECT) - MySQLへの接続 - PHP入門   http://www.phpbook.jp/tutorial/mysql/index6.html <希望内容> ・「mysql」→「mysqli」 ・「mysqli」手続き型 ・SELECT idの「id」部分を動的対応(プリペアドステート) ・可能なら(?)、「mysqli_stmt_fetch」ではなく、「mysqli_fetch_assoc」利用

    • ベストアンサー
    • PHP
  • mysql データ表示

    下記のプログラムは詳細を選択すると選択されたデータをいま1件ずつ表示しているのですが 氏名と住所を編集できるようにテキストボックスにしたいまた選択されたデータを初期値として取りたいです 表示されるのですが入力できません どこにフォームなどの命令を入れればいいですか 全体表示のtop.php <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>詳細</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "<td><a href=\"exit.php?id=" . $row['番号'] . "\">詳細</a></td>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html> 詳細表示の exit.php <html> <body> <table border='1'> <BR><BR> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr> <?php $id=(isset($_GET["id"]))?((int) $_GET["id"]):0; $con=mysqli_connect("localhost","root","admin","db_test"); $result = mysqli_query($con,"SELECT `番号`,`氏名`,`住所` FROM tbl_test where `番号`={$id}"); while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) { print "<tr>"; print "<td>".htmlspecialchars($row["番号"])."</td>"; print "<td>".htmlspecialchars($row["氏名"])."</td>"; print "<td>".htmlspecialchars($row["住所"])."</td>"; print "</tr>"; } ?> </table> <BR><BR> <A HREF="http://localhost/top.php"> <INPUT TYPE = "SUBMIT" VALUE = "一覧へ戻る"></A> </body> </html>

  • mysqlの掲示板

    プログラム初心者です phpとmysqliで簡単な掲示板を作りました。これをスレッド掲示板に変更したいと思っています 質問1 MyISAMの違うテーブルに同時アクセスできるのでしょうか? bbs1とゆうテーブルに同時アクセスはできないのはわかりますがテーブルを二つに分けた場合どうなりますか? 例えばbbs1とbbs2とゆうテーブルを作った場合、bbs1とbbs2に同時に書き込まれた場合でもテーブルが違うと書き込めるのでしょうか? 質問2 2chのようにスレッド掲示板にしたいのですが、テーブルは2つで作れると考えました(スレッドとレス)スレッド番号でレスをまとめるやり方です このような1つのテーブルでレスをまとめた場合、複数のカラムにindexをつけると将来100万行とかになっても軽快に動きますか? それとも、スレッドごとにテーブルを作ったほうがいいのでしょうか? よろしくお願いします

    • ベストアンサー
    • MySQL
  • 削除ふらぐ

    プログラム初心者です phpとmysqlで簡単な掲示板を作りました 一つのテーブルでsure_idごとにスレッドをつくり、resu_idでレス番号をつくっています そこで削除フラグがある場合にはそのレスを表示しないようにしたいのです 素人なのでこんな方法しか思い浮かばないのですがこれで大丈夫でしょうか? 5番のスレッドを全て取得し、削除フラグがない行を全て取得 SELECT * FROM bbs WHERE sure_id=5 and dll_flg=0 質問1 削除フラグはどのような立て方が良いでしょうか?0と1でしょうか? 質問2 削除フラグのカラムにもインデックスを張ったほうが速いですか? 質問3 phpでいちいちif文で判定するよりsqlで表示判定したほうが早いですよね? よろしくお願いします

    • ベストアンサー
    • MySQL
  • アドレスに[?****]と入れると、表示する内容が変わるようにしたい。

    こんばんわ。 たとえばindex.php?link だったら、リンクページ。 みたいに、?****と付けたら、変化するページを作りたいです。 (index.php?****で、index.php?hgyggyubg←のように、適当なアドレスで打ってきたら、エラー(404みたいの)を返せたらなお良いです) PHPについては初心者です アップするサーバーは5.2.9のPHPを使っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • よくわかるPHPの教科書のエラー?について

    わからないところがあるので教えて下さい。 (コード) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. w3.org/TR/xhtmll/DTD/xhtmll- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>PHP入門</title> </head> <body> <?php require('dbconnect.php'); $page = $_REQUEST['page']; if($page =='') { $page =1; } $page = max($page, 1); //最終ページを取得する $sql ='SELECT COUNT(*) AS cnt FROM my_items'; $recordSet = mysqli_query($db, $sql); $table = mysqli_fetch_assoc($recordSet); $maxPage = ceil($table['cnt'] /5); $page = min($page, $maxPage); $start = ($page - 1) * 5; $recordSet = mysqli_query($db, 'SELECT m.name, i.* FROM makers m, my_items i WHERE m.id=i.maker_id ORDER BY id DESC LIMIT ' . $start . ',5'); ?> <p><a href="input.php">新しい商品を登録する。</a></p> <table width="100%"> <tr> <th scope="col">ID</th> <th scope="col">メーカー</th> <th scope="col">商品名</th> <th scope="col">価格</th> <th scope="col">編集・削除</th> </tr> <?php while($table = mysqli_fetch_assoc($recordSet)) { ?> <tr> <td><?php print(htmlspecialchars($table['id'])); ?></td> <td><?php print(htmlspecialchars($table['name'])); ?></td> <td><?php print(htmlspecialchars($table['item_name'])); ?></td> <td><?php print(htmlspecialchars($table['price'])); ?></td> <td><a href="update.php?id=<?php print(htmlspecialchars($table['id'])); ?>">編集</a> <a href="delete.php?id=<?php print(htmlspecialchars($table['id'])); ?>" onclick="return confirm('削除してもよろしいですか?');">削除</a> </td> </tr> <?php } ?> </table> <ul class="paging"> <?php if($page > 1) { ?> <li><a href="index.php?page=<?php print($page - 1); ?>">前のページへ </a></li> <?php } else { ?> <li>前のページへ</li> <?php } ?> <?php if($page < $maxPage) { ?> <li><a href="index.php?page=<?php print($page + 1); ?>">次のページへ </a></li> <?php } else { ?> <li>次のページへ</li> <?php } ?> </ul> </body> </html> 参考書?はよくわかるPHPの教科書5.5対応なのですが、一番初めにこのファイルを開くと Notice: Undefined index: page in C:\xampp\htdocs\shop\index.php on line 14っとエラー?が出ます。 次のページ、前のページを押すとエラー?は消えるのですが、とっても気になります。 なるべくなら、エラーを非表示にせずにプログラム内で問題を解決したいのですが・・・ 初心者なのでどうして良いかわかりません。 出来れば、とってもわかりやすい解決を出来ればお願いしたいです。(馬鹿なので・・・) よろしくお願いします。

    • ベストアンサー
    • PHP
  • 検索エンジンにミラーサイトと誤解されないためには?

    アクセス元を知るために、リンクするURLにこのように番号を振りたいと思います。 http://www.test.co.jp/index.php?id=100 これは、下記のようなURLでもまったく同じページが表示されます。 http://www.test.co.jp/index.php?id=1001 http://www.test.co.jp/index.php?id=2002 この手法で一つ気になるのが、検索エンジンがこれを別のページと誤って解析し、ミラーサイトと誤認してしまわないだろうかということです。 id=XXXXの部分を無視させるなど、検索エンジンに誤解されないようにする手法はないものでしょうか?

  • 別HTMLファイルを、レイヤーとして表示させたい

    2つのHTMLファイル「index.html」と「layer.html」があるとして、index.htmlにあるリンクをクリックすると、layer.htmlの内容がレイヤーとして、同一ウインドウに表示されるようにすることは可能でしょうか? layer.htmlには、PHPのスクリプトが入っていまして、そこで色々な処理をして、HTML部分を表示させたいのです。 [index.html] <html> <body> <a href="layer.html?id=hoge">登録する</a> </body> </html> [layer.html] <?php session_start(); $_SESSION['id'] = $_GET['id']; ?> <html> <body> <a href="">トップページに戻る</a> <a href="">閉じて作業を続ける</a> </body> </html> のような感じです。