- ベストアンサー
カテゴリ毎の記事件数表示
- PHPとMySQLを使用して、カテゴリ毎に記事の件数を表示したい場合の方法について質問です。
- 現在、カテゴリid毎にレコード数をカウントして、配列で受けて表示するスクリプトを作成していますが、うまく表示されない問題が発生しています。
- スクリプトの間違いや改善方法など、お知恵をお借りしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 難しく考えずに、カテゴリ一覧を取得して表示しているループ内で 表示を行っているカテゴリIDを使用してprodテーブルのレコード数をカウントしてはいかがでしょうか? <?php // カテゴリ一覧を取得 $sql = "SELECT * FROM cate"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); // 取得したカテゴリ一覧を展開 while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { // 現在表示を行おうとしているカテゴリのレコード数をprodテーブルより取得 // SQLは実テーブルに合わせて下さい。 $sql = "SELECT COUNT(cateid) AS cnt FROM prod WHERE cateid={$row['cateid']}"; $cntRet = mysql_query ( $sql, $conn ); $cnt = mysql_fetch_array ( $cntRet, MYSQL_ASSOC ); ?> <p> <a href="<?=$_SERVER["PHP_SELF"]?>?cateid=<?= $row["cateid"].$tmpprod ?>"><?= cnv_dispstr($row["catename"]) ?>(<?= $cnt["cnt"] ?>件)</a> </p> <?php }// End While ?> 速度的にもそんなに問題にはならないと思います。 *実際に動作はさせてないので細かい修正は出るかもしれません。
その他の回答 (1)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 while ( $numrow=mysql_fetch_array($res,MYSQL_ASSOC) ) { echo $numrow["cnt"]; } になるとおもいます。
お礼
LancerVIIさま 早速のご回答、大変ありがとうございました。 無事、カテゴリ毎の件数が表示されました。 そこで大変厚かましいのですが、補足質問をさせて頂きましたので、 もしよろしければ、また(みなさんの)お知恵をお借りできればと存じます。 どうぞよろしくお願いいたします。
補足
現在、カテゴリ一覧表示を以下のようにしております。 ―――――――――――――― <?php $sql = "SELECT * FROM cate"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { ?> <p><a href="<?=$_SERVER["PHP_SELF"]?>?cateid=<?= $row["cateid"].$tmpprod ?>"> <?= cnv_dispstr($row["catename"]) ?></a> ―――――――――――――― このカテゴリ名(のリンク)の横に件数表示をしたいのですが、 当初の質問&ご回答頂いたスクリプトをこの↑スクリプトの前後どちらにおいても、当たり前ながら、件数表示だけが固まって表示されるだけで、カテゴリ名の横に表示させる方法が見つけられません。 ★カテゴリ名の横に件数表示させるいい方法はありますでしょうか? (「SELECT * FROM cate」と「SELECT COUNT(cateid) AS cnt FROM prod GROUP BY ~」を同時に行うことができればいいなと思うのですが…) 尚、MySQLにはprod、cateの2テーブルがあり、 ・cateテーブルは、カテゴリ名とカテゴリid ・prodテーブルは、カテゴリidと商品名、商品id…等 のフィールドがある状態です。 どうぞよろしくお願いいたします。
お礼
LancerVIIさま 度々の質問に快くお答え頂き、本当に有り難うございます。 ご教示頂いたスクリプトにより、無事に希望通りの「カテゴリ名(件数)」 の表示が出来ました! 本当に有り難うございます! 自分一人では、たぶん 「$sql = "SELECT COUNT(cateid) AS cnt FROM prod WHERE cateid={$row['cateid']}";」 の部分は思いつかなかったと思います。 まだまだやる事がたくさんあり、時間があまり無い状況のため、 核心を突いたご回答を頂けて本当に心から感謝しております。 どうもありがとうございました。