記事のコメント数表示について

このQ&Aのポイント
  • phpにて掲示板を作成しており、書く記事のタイトル一覧が表示され、各記事のコメント数を表示させたいと思っています。
  • 掲示板の記事に対するコメント数を表示する方法がわかりません。
  • 参考サイトのように返信数として表示する方法を教えてください。
回答を見る
  • ベストアンサー

記事のコメント数表示について

phpにて掲示板を作成しており、書く記事のタイトルの一覧が表示され、各記事のコメント数を表示させたいと思っているのですが、なかなかできません。 どなたかご教授お願いします。 コードは下記のとおりです、 $bbs_query = sprintf("SELECT * FROM `bbs` ORDER BY `reg_date` DESC"); $bbs_result = mysql_query($bbs_query, $link) or die(mysql_error()); while ($bbs = mysql_fetch_assoc($b_result)) { $comment_result = "SELECT COUNT(*) AS count(bbs_id) FROM `bbs_comment` WHERE `bbs_id` = " .$bbs["id"]. "GROUP BY bbs_id"; $tmp = $comment_result; $count = $tmp["count"]; $bbs["count"] = $count; if($bbs) { $bbsList .= "<tr>\n"; $bbsl .= "<td class=\"title\"><a href=\"topics.php?topicNo=$bbs[id]\">".$bbs["title"]."</a></td>\n"; $bbsl .= "<td>(".//****$count*****//.")</td>\n"; $bbsl .= "<td>".$bbs["name"]."</td>\n"; $bbsl .= "<td>".date("Y/m/d H:i", strtotime($bbs["reg_date"]))."</td>\n"; $bbsl .= "</tr>\n"; } } としており、コメントの数(//****$count*****//)がSと表示されます。 参考サイトはこちらです。 http://www.kent-web.com/bbs/patio/patio.cgi こちらのサイトはcgiで作成していますが、こちらのサイトの返信数という感じで表示させたいです。 お分かりの方がいらっしゃいましたら宜しくお願いいたします。

  • PHP
  • 回答数5
  • ありがとう数1

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.4

> コメントがある場合でないと記事が一覧が表示されないようになってしまいました。 $query = <<<__QUERY__ SELECT `id`,`name`,`title`,UNIX_TIMESTAMP(`reg_date`) AS `reg_date`, IF(`count` IS NULL, 0, `count`) AS `count` FROM `bbs`, LEFT JOIN (SELECT `bbs_id`, COUNT(`bbs_id`) AS `count` FROM `bbs_comment` GROUP BY `bbs_id`) AS `c` ON `c`.`bbs_id` = `bbs`.`id` ORDER BY `reg_date` DESC; __QUERY__; > You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY bbs_id' at line 1 GROUP BY の前のスペースが抜けている。 せっかく sprintf を使っているならもっとうまく活用してください。

h199613
質問者

補足

度重なるご回答有難う御座います。 上記の内容でできました。 本当に有難う御座います。 また、何かありましたらご教授いただければと思います。 本当に有難う御座いました。

その他の回答 (4)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.5

FROM `bbs`, ⇒ FROM `bbs` (人のこと言えんな) > としており、コメントの数(//****$count*****//)がSと表示されます。 ちなみにそいつは SELECT の最初の S PHP では文字列を配列の様に扱える。"count" を数値にキャストした場合 0 つまり最初の文字が取り出される。

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

WHILE ⇒ WHERE (何で while て書いたんだろ。きっと下で使ってるからだ) その他所々ミスタイプがあるので修正してください。 自ら努力より、まずは良い資料と、良い師に巡り合うことだ。努力はその後でいい。 ここの掲示板を見ている限りでは特にそう思える。 >> にしたところエラーがでるため、mysql_queryを入れないようにしています。 エラーは何と出ていますか。

h199613
質問者

お礼

できました。有難う御座います。 ただ、記事に対して、コメントがある場合でないと記事が一覧が表示されないようになってしまいました。 フォロー有難う御座います。 ただできる限りは自分で努力してみたいと思います。 >>エラーは何と出ていますか。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY bbs_id' at line 1 とでました。

回答No.2

SELECT文が2箇所にありますが、mysql_query()が1箇所しかありません。 そこら辺からなんとかしましょうよ。 質問はもちろん大切です。自分で勉強を続けることも大切です。 自らする努力が大きいほど手助けも自然とたくさん集まると思いますよ。

h199613
質問者

補足

ご回答有難う御座います。 $c_query = sprintf("SELECT COUNT(`bbs_id`) AS `count` FROM `bbs_comment` WHERE `bbs_id` = " .$bbs["id"]. "GROUP BY bbs_id"); $c_result = mysql_query($c_query, $link) or die(mysql_error()); にしたところエラーがでるため、mysql_queryを入れないようにしています。 まだ、phpは初心者のため自分で調べながら、考えてやっています。 それでもわからないからお分かりの方に教えて欲しいと思い、投稿しました。 あなたは何がしたいのかわかりませんが、そもそもここの掲示板の意味わかります? 教えてほしいから教えてgooなわけじゃないですか。 そんなことを言いたいがためにコメントしてきたのですか?

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

function h($str) { return htmlentities($str, ENT_QUOTES, 'sjis'); } $query = <<<__QUERY__ SELECT `id`,`name`,`title`,UNIX_TIMESTAMP(`reg_date`) AS `reg_date`,`count` FROM `bbs`, (SELECT `bbs_id`, COUNT(`bbs_id`) AS `count` FROM `bbs_comment` GROUP BY `bbs_id`) AS `c` WHILE `c`.`bbs_id` = `bbs`.`id` ORDER BY `reg_date` DESC; __QUERY__; $bbs_result = mysql_query($query, $link) or trigger_error(mysql_error(), E_USER_ERROR); ?> <? while ($bbs = mysql_fetch_assoc($bbs_result)) : ?> <tr> <td class="title"><a href="topics.php?topicNo=<?=urlencode($bbs['id'])?>"><?=h($bbs['title']?></a></td> <td><?=h($bbs['count'])?></td> <td><?=h($bbs['name'])?></td> <td><?=date("Y/m/d H:i", $bbs['reg_date']))?></td> </tr> <? endwhile; ?>

h199613
質問者

補足

ご回答有難う御座います。 SELECT `id`,`name`,`title`,UNIX_TIMESTAMP(`reg_date`) AS `reg_date`,`count` FROM `bbs`, (SELECT `bbs_id`, COUNT(`bbs_id`) AS `count` FROM `bbs_comment` GROUP BY `bbs_id`) AS `c` WHILE `c`.`bbs_id` = `bbs`.`id` ORDER BY `reg_date` DESC; のところでエラーが出てしまいます。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE `c`.`bbs_id` = `bbs`.`id` ORDER BY `reg_date` DESC' at line 2 おわかりになりますでしょうか?

関連するQ&A

  • どのような処理をしているのでしょうか?

    http://php.birdlab.com/download/1001 のプログラムを参考に掲示板作成の勉強をしているのですが、 以下の箇所がどのような処理をしているか分かりません。 どなたか、詳しく教えてください。よろしくお願いします。 function formCheck()の $query = "select count(*) from onebbs where id = ".$this->post['id']." and name = '".addslashes($this->post['name'])."' and comment = '".addslashes($this->post['comment'])."' and date > adddate(now(), interval -1 hour)"; $result = mysql_query($query); if ($result !== false) { if (mysql_result($result, 0, 0) == 0) { return true; }

    • ベストアンサー
    • PHP
  • DBから取得した内容を横表示

    質問します。 DBにID,NAME,IMGと言うカラム名があります。 例 ID NAME IMG 0001 PHP1 PHP1 0002 PHP2 PHP2 0003 PHP3 PHP3 データを取得し、ブラウザにて横に表示するように したいのですが、うまくいきません…。 ブラウザーイメージ 0001 0002 0003 PHP1 PHP2 PHP3 画像 画像 画像 以下がサンプルです。 <?php //DB接続 if((!$db = mysql_connect("","",""))){ die; } //DB選択 if((!mysql_select_db(""))){ die; } if(!mysql_query('set names sjis')){ echo "sjis 設定エラー"; die; } $SQL = "SELECT * FROM video_data"; if(!($rs = mysql_query($SQL))){ print mysql_error(); die; } ?> <table border="0"> <TR> <?php $count = 0;      while($item = mysql_fetch_array($rs)){ //ID表示 print "<TD>".$item['ID']."</TD>"; //名前表示 print "<TD>".$item['NAME']."</TD>"; //改行     if($count == 4){       print "</TR>";   $count = 0;     }     //IMG表示 print "<TD><img src='./test/".$item['ID'].".jpg'/></TD>"; $count++; } print "<TR>"; //コネクションクローズ mysql_close(); ?> </TABLE> どこを修正したらいいのかわかりません… 色々やっているんですが…。 わかる方が居たらヒントでもいいので 教えて下さい。よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysql_query等でレコード数を変数に格納

    mysql> SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' ) ; で +------+ | rows | +------+ | 9 | +------+ と出すことができます。 この rows の数「9」を php の変数に入れたいのです。 <?php // DB接続省略 $sql = "SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' )" ; $result = mysql_query($sql, $conn); var_dump($sql."<br />"); echo ($result."--result"."<br/>"); $rows= mysql_num_rows($result); echo ($rows."--rows"."<br/>"); ?> として、ブラウザで確認すると string(80) "SELECT COUNT(id) AS rows FROM someTABLE WHERE name IN ( 'A','B','C' ) " Resource id #3--result 1--rows となって、 $rows に値’9’が入りません。$rows にレコード数を取得させるには、どうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • 文字設定に関して

    教えて下さい。 自身の環境の文字設定が把握できておらず申し訳ありません。 以下のようにSQLを投げ、取得したデータを表示させようとしていますが、取得はできている ものの $tmp_kenmei を表示させようとしたところ、表示されません。 echo で中身を確認した際には、問題なくセットされていました。 また、where句で条件を指定しない場合は、問題なく取得できます。 文字設定か何かの問題かと思われますが、、、 何が原因でしょうか、、、教えて下さい。 よろしくお願いします。 《内容》 $tmp_kenmei = mb_convert_encoding($tmp_kenmei,"UTF-8","SJIS"); $con = mysql_connect("localhost", "root", "999999"); //データベースへ接続する if (!$con) { die('接続できませんでした: ' . mysql_error()); } $sql = "select kenmei from tbl_AAA where kenmei like '%" . $tmp_kenmei . "%'"; if (!mysql_select_db('db', $con)) { echo 'Could not select database'; exit; } $result = mysql_query($sql,$con); mysql_query("set names sjis"); if (!$result) { echo "DB Error, could not query the database\n"; echo 'MySQL Error: ' . mysql_error(); exit; } $row = mysql_num_rows($result); $count = 1; for($i=0;$i<$row;$i++) { $array = mysql_fetch_array($result); //件名 $tmp_kenmei[$count] = mb_convert_encoding($array[0],"SJIS","UTF-8"); echo mb_convert_encoding($array[0],"SJIS","UTF-8"); $count++; }

    • ベストアンサー
    • PHP
  • MySQL「10行を超えたら削除する」について

    初心者と言うより、全く全くわからない状態で質問することご容赦下さい。ブログ調の掲示板で、MySQLを使っておりますが、掲示板内の投稿が10投稿を超えると、古いものから順に削除されていく状態のようで、そのリミットを完全に解除したいと思い、ファイルを探していたら、 //10行超えたら削除していく $result = mysql_query("select * from bbs_data where bbs_user_id='{$urow[id]}' order by id desc limit 9,1") or die(mysql_error()); if(mysql_num_rows($result) == 1){ $row = mysql_fetch_assoc($result); $result = mysql_query("delete from bbs_data where bbs_user_id='{$urow[id]}' and id < '{$row[id]}'") or die(mysql_error()); } という部分がありました。このリミットを解除するにはここのプログラムを変えればいいのでしょうか? その場合、どのようにしたらいいか教えて下さい。

    • ベストアンサー
    • MySQL
  • カテゴリ毎の記事件数表示

    PHPとMySQLを使用しています。 ブログなどで、カテゴリ毎にそのカテゴリに登録されている記事件数がカテゴリ横に表示されているケースがあります。 (「カテゴリ名(15)」←のようなものです) それと同じことをしたいのですが、 ―――――――――― $sql = "SELECT COUNT(cateid) AS cnt FROM prod GROUP BY cateid order by cnt"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $numrow = mysql_fetch_array($res, MYSQL_ASSOC);   while($numrow){   echo $numrow["cnt"];   } カテゴリid毎にレコード数をカウントして、それを配列で受けて表示する ―――――――――― という流れのつもりなのですが、上記スクリプトの「while~」部分がない場合は、1つのカテゴリidの登録数のみが表示され、他のカテゴリidは表示されず、「while~」を加えるとPCがフリーズしました。 熟考できていないのですが、何かヒントや上記スクリプトの間違いなどを ご指摘いただけると大変有り難く存じます。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • テーブルのデータをarray (array (***, ***)) の形式で取得したい

    id、氏名、年月日(date)、点数(tensu)の列を持つテーブルseiseki があります。 <?php $conn_id = mysql_connect("localhost","root","*****") or die('Error connecting to MySQL'); mysql_select_db('******',$conn_id); $query ="SELECT date,tensu from seiseki; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $date = array(); $tensu = array(); while($row = mysql_fetch_array($result)){ $date[] = $row['date']; $tensu = $row['tensu']; } print_r($date); echo "<br/>\n";      ←15行目 print_r($tensu); echo "<br/>\n";      ←16行目 ?> これをブラウザで見ると、 Array ( [0] => 2009-05-01 [1] => 2009-06-07 [2] => 2009-07-24 ・・・・・・ ) Array ( [0] => 80 [1] => 75 [2] => 90 ・・・・・・・ ) となります。 15,16行目をコメントアウトして print_r($row[“date”],[“$tensu”]); とするとエラーになります。 array (array (2009-05-01, 80), array (2009-06-07, 75 ), array (2009-07-24 , 90)・・・・・・・ ); の形式でデータを取得するにはどのようにすれば良いでしょうか?

    • ベストアンサー
    • MySQL
  • mysql_queryでDB検索をしたいが、結果が表示できない

    MYSQL関数の練習で、以下のソースを実行しました。selectDBなどの部分は省いております。 $sql_keyword = ereg_replace("[[:blank:]]+","%\" and name LIKE \"%",trim($word)); $sql = "SELECT * FROM shop where name LIKE \"%$sql_keyword%\""; $result = mysql_query($sql) or die('Query failed: ' . mysql_error()); echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo convert("\t\t<td>$col_value</td>\n"); } echo "\t</tr>\n"; } echo "</table>\n"; mysql_free_result($result); で行うも、エラーなども無く、結果がブランクになってしまいます。 検索する文字列($WORD)に該当するレコードは複数存在します。 エラーなどもないため、原因がわかりません。皆様のお力をお借りできればと存じます。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでMySQLのストアドプロシージャを実行するには?

    こんにちは、この件でいろいろ検索していたのですが ストアドの作成まではできているのですが、PHPからの 実行のさせ方がわからず質問させていただきました。 環境は、PHP 5.2.9 + MySQL5.1.32 で MySQLでストアドプロシージャを作成して、実行できるのですが これをphpから実行させたいのですが、どのように記述すればよいのかわからず悩んでおります。 実行したいストアドは Gen_rank という名前でコンソールから実行できることは確認しています。 下記のようにしてみましたが、ストアドは走りませんでした。 <?php require_once("db_connect.php"); // クエリを送信する $sql = "call Gen_rank();"; $sql = "SELECT id, name, phonetic, age, s4, s9, rank FROM tmp_records ORDER BY rank"; $result = executeQuery($sql); // 結果セットの行数を取得する $rows = mysql_num_rows($result); // 表示するデータを作成 if($rows){  while($row = mysql_fetch_array($result)) {   $tempHtml .= "<tr>";   $tempHtml .= "<td>".$row["id"]."</td><td>".$row["name"]."</td><td>".$row["phonetic"]."</td><td>".$row["age"]."</td><td>".$row["s4"]."</td><td>".$row["s9"]."</td><td>".$row["rank"]."</td>";   $tempHtml .= "</tr>\n"; }  $msg = $rows."件のデータがあります。"; }else{  $msg = "データがありません。"; } // 結果保持用メモリを開放する mysql_free_result($result); ?>

    • 締切済み
    • PHP
  • htmlとphpの分離

    お世話になります。 ビジュアルをcssで調整するために、htmlとphpの分離したいんですが、どう分ければいいか教えていただけませんか? ソースはこれです↓ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <link rel="stylesheet" type="text/css" href="base.css"> <title>ファイルのアップロードフォーム</title> </head> <body> <form enctype="multipart/form-data" method="post"> <input type="file" name="myfile" size="30"> <input type="submit" value="アップロード"> <?php //全てのエラー・警告を出力する ini_set('error_reporting', E_ALL); //アップするディレクトリ $uploads_dir = '../../file_manager/uploads'; //データベースに接続 $con = mysql_connect('','',''); mysql_select_db(""); //セットされているかのチェック if(isset($_FILES["myfile"]) and $_FILES["myfile"]["type"]=="application/pdf" and $_FILES["myfile"]["error"] == UPLOAD_ERR_OK) { $tmp_name = $_FILES["myfile"]["tmp_name"]; $name = mysql_real_escape_string($_FILES["myfile"]["name"]); $size = $_FILES["myfile"]["size"] / 1024; //テーブルに格納 $sql ="insert into t_pdf_manage (name,size,upload_time,modify_time,flg) values('$name',$size,now(),now(),1)"; mysql_insert_id(); mysql_real_escape_string($sql); $sql .=" on duplicate key update size=$size,modify_time=now(),flg=1"; $result=mysql_query($sql,$con); //テーブルからidを抽出 $sql ="select id from t_pdf_manage where name='$name'"; $result=mysql_query($sql,$con); //添字配列でidを取得 $row=mysql_fetch_row($result); $up_name=$row[0]; //ファイル名をidにしてアップ move_uploaded_file($tmp_name, "$uploads_dir/$up_name"); } if(isset($_POST["del"]) and is_array($_POST["del"])) { $sql ="update t_pdf_manage set flg=0 where id in("; $flg=true; foreach($_POST["del"] as $val) { if($flg) {$flg=false;} else {$sql.=",";} $sql .="'".mysql_real_escape_string($val)."'"; } $sql .=")"; $result=mysql_query($sql,$con); } $sql ="select id,name,size,upload_time,modify_time from t_pdf_manage where flg=1"; $result=mysql_query($sql,$con); print "<table border=1>\n"; print "<tr>\n"; print "<th>名前</th>\n"; print "<th>サイズ(KB)</th>\n"; print "<th>アップロード</th>\n"; print "<th>更新</th>\n"; print "<th>表示</th>\n"; print "<th>削除</th>\n"; print "</tr>\n"; while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ print "<tr>\n"; print "<td>".htmlspecialchars($row["name"])."</td>\n"; print "<td>".$row["size"]."</td>\n"; print "<td>".$row["upload_time"]."</td>\n"; print "<td>".$row["modify_time"]."</td>\n"; print "<td><a href=\"hyouji_test.php?id=" . $row["id"] . "\" target=\"new\"><img src=\"pdf.gif\"/></a></td>\n"; print "<td><input type=\"checkbox\" name=\"del[]\" value=\"".$row["id"]."\"></td>\n"; print "</tr>\n"; } print "</table>\n"; mysql_close($con); ?> <input type="submit" value="削除"> </form> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう