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

解決済みの質問

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

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で作成していますが、こちらのサイトの返信数という感じで表示させたいです。

お分かりの方がいらっしゃいましたら宜しくお願いいたします。

投稿日時 - 2010-11-20 02:03:25

QNo.6331135

すぐに回答ほしいです

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

> コメントがある場合でないと記事が一覧が表示されないようになってしまいました。
$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 を使っているならもっとうまく活用してください。

投稿日時 - 2010-11-20 17:43:22

補足

度重なるご回答有難う御座います。
上記の内容でできました。

本当に有難う御座います。
また、何かありましたらご教授いただければと思います。

本当に有難う御座いました。

投稿日時 - 2010-11-21 14:38:58

ANo.4

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

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

回答(5)

ANo.5

FROM `bbs`, ⇒ FROM `bbs` (人のこと言えんな)

> としており、コメントの数(//****$count*****//)がSと表示されます。
ちなみにそいつは SELECT の最初の S

PHP では文字列を配列の様に扱える。"count" を数値にキャストした場合 0 つまり最初の文字が取り出される。

投稿日時 - 2010-11-20 19:33:29

ANo.3

WHILE ⇒ WHERE (何で while て書いたんだろ。きっと下で使ってるからだ)

その他所々ミスタイプがあるので修正してください。

自ら努力より、まずは良い資料と、良い師に巡り合うことだ。努力はその後でいい。
ここの掲示板を見ている限りでは特にそう思える。


>> にしたところエラーがでるため、mysql_queryを入れないようにしています。
エラーは何と出ていますか。

投稿日時 - 2010-11-20 15:37:49

お礼

できました。有難う御座います。
ただ、記事に対して、コメントがある場合でないと記事が一覧が表示されないようになってしまいました。

フォロー有難う御座います。
ただできる限りは自分で努力してみたいと思います。

>>エラーは何と出ていますか。
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
とでました。

投稿日時 - 2010-11-20 16:59:04

ANo.2

SELECT文が2箇所にありますが、mysql_query()が1箇所しかありません。
そこら辺からなんとかしましょうよ。

質問はもちろん大切です。自分で勉強を続けることも大切です。
自らする努力が大きいほど手助けも自然とたくさん集まると思いますよ。

投稿日時 - 2010-11-20 10:41:14

補足

ご回答有難う御座います。
$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なわけじゃないですか。

そんなことを言いたいがためにコメントしてきたのですか?

投稿日時 - 2010-11-20 14:31:38

ANo.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; ?>

投稿日時 - 2010-11-20 02:39:56

補足

ご回答有難う御座います。

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

おわかりになりますでしょうか?

投稿日時 - 2010-11-20 14:41:57

あなたにオススメの質問