• ベストアンサー

データ件数を取得したい

こんばんは。お世話になっております。 http://oshiete1.goo.ne.jp/qa2684315.html 先日、カテゴリMySQLにおいて(上記ページ)、下記のような結果を返すための質問をさせていただき、当初は出来たものの、込み入ったソースが故に、各件数の取得が出来なくなってしまいました。 結果 きゅうり 3件 とまと  2件 さんま  1件 本来であれば、全てのソースを提示すべきところでしょうが、文字数制限もありそれが出来ず、また、当初出来たというのも、「たまたま出来た」という程度だったのかなどと思うようになり、改めて考え方というものをご教授いただきたく投函させていただきました。 ちなみに(お恥ずかしいのですが。汗)、当初出来たというのは、 echo $row[2]; で件数を取得を取得する事が出来ました。 お忙しい中恐縮ですが、ヒントだけでも頂戴出来れば幸いです。 宜しくお願い致します。

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

  • ベストアンサー
回答No.2

この問題は基本的にMySQLで処理すべき内容です。 つまり、 http://oshiete1.goo.ne.jp/qa2684315.htmlのyambejpさんの回答に従って、 PHP側で処理しようとしたのが間違いです。 まあ、絶対に間違いとは言い切れませんが、折角データベースを使っているのにその機能を使わないのは、 ダンプカーからスコップで砂利を降ろしているようなものですよ。 MySQLのカテに戻って、新たに質問をした方が良いですね。

sadacha
質問者

お礼

net_lander様 はじめまして、こんにちは。ご親切なご指摘を有難う御座います。 『yambejpさんの回答に従って、PHP側で処理しようとしたのが間違いです。』 ・・・いや、yambejpさんがPHPでの処理を教えて下さったのは、ランク(表示順)のことで、件数を取得するためのものではありません。 ただ私の勉強不足からくる誤解から、PHPにてこれら(件数)も取得しようと、今回投函させて頂いた次第です。 いずれにしても有難いご指摘と感謝し(ホント気付かされました)、改めて投函させて頂きます。有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

どうできなくなって、どうしたいのかが分からないと答えられません。

sadacha
質問者

お礼

moon_night様 こんにちは。いつもお世話になっております。 上のnet_lander様から、PHP側で処理すべきではないとのご指摘を受けましたが、折角のご親切な問い、改めて書きに記載させて頂きます。 考えてみれば当然ですよね。繰り返し処理(while)の中で新たにselectして件数を取得するまでは出来たのですが、効率的にどうなのか?が分からず困っている次第です。 いずれにしてもカテゴリ違いとのことなので、改めて投函させて頂きます。有難う御座いました。 テーブル(member) id id_name name  1 takashi さんま 2 sayuri きゅうり 3 akemi  とまと テーブル(data) id date 2 07-1-20 3 07-1-20 2 07-1-20 1 07-1-21 2 07-1-21 3 07-1-21 以上のようなテーブルがあり、下記のように、テーブルdataのidをカウントし、多いもの順に結果を表示させたいのですが、このような場合のソースが分かりません。 結果 きゅうり 3件 とまと  2件 さんま  1件

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数のテーブルに跨る集計

    こんばんは。お世話になっております。 テーブル(member) id id_name name  1 takashi さんま 2 sayuri きゅうり 3 akemi  とまと テーブル(data) id date 2 07-1-20 3 07-1-20 2 07-1-20 1 07-1-21 2 07-1-21 3 07-1-21 以上のようなテーブルがあり、下記のように、テーブルdataのidをカウントし、多いもの順に結果を表示させたいのですが、このような場合のソースが分かりません。 結果 きゅうり 3件 とまと  2件 さんま  1件 似たような質問をされている方も過去に多くあるようですが、私のケースとどれが適しているかさえも分からず投函させていただきました。 お忙しい中恐縮ですが、説明のあるサイト、またはアドバイスなどご指導いただけたら幸いです。宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 2つのテーブルからのデータ取得および件数の取得

    こんばんは。お世話になっております。 ココのところ、件数を取得する質問ばかりですが、スキル不足故にこれまでの有難いアドバイスを応用出来ずにお恥ずかしい限りですが、改め今回もご指導いただければと投函させて頂きます。 イメージ的にミクシィのマイミク一覧の各々のマイミク件数の表示と同じような事がしたいと考えてます。(MySQL 4.1) 実際のテーブルとは違いますが、マイミクを例に取ったので・・ table:member id name 1 哲也 2 淳二 3 真由美 4 弘子 table:friend(マイミク登録状況を示すテーブル) no id f_id 1  2  3 2  1  2 3  3  1 4  4  2 5  2  1 6  4  1 7  4  3 8  2  4 ※id、f_id共にmemberテーブルのidと紐付け そこで、テーブルfriendのidを4という条件で検索した時、 その4の相手方であるf_idをmemberテーブルのnameと共に一覧表示し、かつ、テーブルfriendにおいて、そのf_idをidに差し替え、相手方のf_idの件数を同時に表示させたいと考えてます。 上記テーブルの場合、以下のような感じ。 淳二  3 哲也  1 真由美 1 冒頭にも述べましたが、これまで多くのアドバイスを頂戴しながらも、似たような質問にてお恥ずかしい限りですが、描いている構想を進めるたびに壁に突き当たっている次第です。お忙しい中恐縮ですが、ご指導いただければ幸いに思います。宜しくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • getUpdateCount( ); でDelete件数を取得できますか?

    はじめまして。 javaを始めたばかりの初心者です。 SQLの結果件数の取得で悩んでいます。 Update件数の取得は出来るのですが DELETE件数の取得が出来ないのです。 作業環境は   postgreSQL 7.2.1    JAVA 1.3.1_04             です。 ++++ソース抜粋++++ stmt.executeUpdate(Updateクエリ); //今回のアップデート完了件数 int upd_cnt = stmt.getUpdateCount();   ↑きちんと取得できます。 stmt.executeUpdate(DELETEクエリ); //今回のデリート完了件数 int del_cnt = stmt.getUpdateCount();   ↑なぜか1件になってしまいます。 どなたかご助言ください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • mysql_fetch_objectにデータを取得させたいのですが、うまく行きません。

    データ型 name varchar(30), item1 char(8), item2 int(6) で、テーブルが下記のようなっています。 | name |item1 | item2 | | taro | abcd | 53 | | taro | efghk | 48 | | taro | lmnp | 02 | while文で array_push($ydata, $row->item1) として $row = mysql_fetch_object($result) にデータを取得させたいのですが(スクリプト下記)、 $conn_id = mysql_connect("localhost","***","***") or die('Error connecting to MySQL'); mysql_select_db('***',$conn_id); $query ="SELECT item1,item2 from XYZ where name='taro'"; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $ydata = array(); while($row = mysql_fetch_object($result)){   ←10行目 // array_push($ydata, $row->item1);      //  ここに下記の13、14行目を追記 } var_dump($row);echo"<br />\n"; var_dump($result); print_r($row); echo"<br />\n"; これでブラウザから見ると bool(false) resource(3) of type (mysql result) としか出ません。(19行目の結果は表示されません。) そのため 13: echo "item1",$row['item1'],"<br>"; 14 echo "item2",$row['item2'],"<br>"; と追記してブラウザから見ると、単に [ item1 ]とだけ表示されます。 10 行目を while($row = mysql_fetch_arrayt($result)){ に変えてブラウザから見ると item1abcd item253 imem1efghk item250 item1lmnp item258 bool(false) resource(3) of type (mysql result)   となります。 $row = mysql_fetch_object($result) にデータを取得させるにはどのように修正すれば良いのでしょうか?

    • ベストアンサー
    • PHP
  • 動的サイトを作ってみたのですが、うまくデータベースからデータが取得できません。。。

    よろしくお願いいたします。 趣味でゲームソフトのデータベースを作っています。 MYSQLを使って動的にデータを表示させるサイトです。 http://www.game-minzoku.jp/meisai.php?titleid=5362 例えばこのようにパラメータをつけてページを展開しているのですが、 この『?title=****』の数字をアドレスバー上で変更してほかのページを表示させようとすると、 該当データがありません。 がと出てしまいます。 これがようやくGoogleにインデックスされ始めてきましたが、自然検索から入ってもこのようなことが起こってしまって困っています。 自分で調べてはみたものの、独学で進めているため、どうやって解決したらよいか分からず困っています。 どなたかお力添えいただけますと幸いです。 問題のページのソースはこちらです。(cssなどの不要と思われる個所はけしてありますが、もし足りない箇所あればおっしゃっていただけますと幸いです) ================================================================ <?php extract($_GET); mysql_connect('****','****','****'); mysql_select_db('****'); mysql_query("set character_set_client=utf8"); mysql_query("set character_set_connection=utf8"); mysql_query("set character_set_results=utf8"); $sql = "select * from game,genre,hanbai,kaihatsu,hard where game.genreid=genre.genreid and game.hardid=hard.hardid and game.hanbaiid=hanbai.hanbaiid and game.kaihatsuid=kaihatsu.kaihatsuid and game.titleid =" . $titleid; $result = mysql_query($sql); $rows = mysql_num_rows($result); $title_name_sql = "select title from game where titleid =" . $titleid ; $res = mysql_query($title_name_sql); $title_name = mysql_result($res,0); echo "<title>"; echo "$title_name | ゲーム民族</title>"; echo "</head><body>"; echo "<a href=index.php>ゲーム民族</a>"; echo "<h1><font size=2>ゲーム民族は"; echo "$title_name"; echo "の詳細を網羅したデータベースのサイトです</font></h1>"; echo "<p><a href=index.php>TOP</a> > $title_name</p>"; echo $title_name の基本情報; if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<a href=",$row["url"],">"; echo "<img src=",$row["img"]," alt=",$row["title"],">"; echo "</a>"; echo "<table border=1 height=40 cellpadding=2 cellspacing=2 width=800>"; echo "<tr><td>タイトル</td><td>"; echo $row["title"]; echo "</td></tr>"; echo "<tr><td>発売元</td><td>"; echo "<p><a href=\"maker.php?hanbaiid=",$row["hanbaiid"],"\">", $row["hanbai"] ,"</a></p>\n"; echo "</td></tr>"; echo "<tr><td>開発元</td><td>"; echo "<p><a href=\"developer.php?kaihatsuid=",$row["kaihatsuid"],"\">", $row["kaihatsu"] ,"</a></p>\n"; echo "</td></tr>"; echo "<tr><td>機種</td><td>"; echo $row["hard"]; echo "</td></tr>"; echo "<tr><td>発売日</td><td>"; echo $row["hatsubai"]; echo "</td></tr>"; echo "<tr><td>ジャンル</td><td>"; echo "<p><a href=\"genre.php?genreid=",$row["genreid"],"\">", $row["genre"] ,"</a></p>\n"; echo "</td></tr>"; $sql2= "select * from game,title_creater,creater,roll where game.titleid=title_creater.titleid and title_creater.createrid=creater.createrid and title_creater.rollid=roll.rollid and game.titleid = " . $row["titleid"]; $result2 = mysql_query($sql2); $rows2 = mysql_num_rows($result2); while($row2 = mysql_fetch_array($result2)){ echo "<tr><td>クリエーター</td><td>"; echo $row2["creater"]; echo $row2["roll"]; echo "</td></tr>"; } } } ?> </body></html> ================================================================ 本当に見にくい意味不明のソースで申し訳ありませんが、よろしくお願いいたします!

    • ベストアンサー
    • PHP
  • 市区町村の表示と件数

    東京都 足立区(~件) 北区(~件) 墨田区(~件)………  神奈川県 横浜市(~件) 川崎市(~件)…………  上記のような形で、データベースからデータを取得して、エリアの横に件数を表示させるPHPを作成したのですが表示速度が遅すぎて困っています。ソースは以下です。1番目のテーブルで、指定した都道府県の市区町村データを取得してから、2番目のテーブルでそれに合致する物件データの件数を取得するというものです。表示速度を改善する方法はありますでしょうか? //ソース $sql_area = "SELECT * FROM エリアのテーブル WHERE area = '東京都'"; $result_area = mysql_query($sql_area); for($i = 0; $i < mysql_num_rows($result_area); $i++){ $arr_area = mysql_fetch_array($result_area); $sql_cnt = "SELECT * FROM 全物件のデータ WHERE 市区町村 = {$arr_area[市区町村]}; $result_cnt  = mysql_query($sql_cnt); $category_cnt = mysql_num_rows($result_cnt); echo $arr_area[区名]({$category_cnt}件); }

    • ベストアンサー
    • PHP
  • データベース表示結果のデザイン

    データベースの全件検索結果の表示のデザインをしたいと考えているのですがうまくいきません。 PHPのソースは以下の通りです。 <?php mysql_connect('localhost','root','******'); mysql_select_db('AAAAAAAA'); $sql= "select * from ??????"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["renban"]; echo " "; echo $row["tourokubi"]; echo " <br />"; echo $row["title"]; echo " "; echo $row["A"]; echo "-"; echo $row["B"]; echo " "; echo $row["C"]; echo " "; echo $row["D"]; echo " "; echo $row["E"]; echo " "; echo $row["F"]; echo " "; echo $row["G"]; echo "</p><hr />"; } } ?> この検索結果の1つ1つのデータをテーブルで囲んでechoで呼び出したA~Gまでの項目を<tr>や<td>で区切って表のような形にしたいのですがどのようにすればいいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mysql>PHPにデータ表示、10件ごとにページ分割

    はじめまして、PHP勉強中の初心者です。。 MYSQLから取り出したデータを件数でページ分割したいのですが、 うまくきません。。 環境:eclipse3.5、mysql5.0、php5.0、xampp (phpで、sql接続、select * from でデータは表示は確認できてます)。。 ソースは↓です。。(初心者なもので不備がればすみません)。。 eclipse上では if (($page_num+1)*10<$cnt) {}でエラーで表示されます。。 どなたかご存知の方いましたら、教えていただけないでしょうか? <!--kensaku.html--> <html> <body> <form action ="kensaku.php" method="post">    名前:<input type="text" name="nm">    年齢:<input type="hidden" name="page_num" value="0">    <input type="submit" name="exec" value="検索"> </form> </body> </html> //kensaku.php ソース <html> <body> <? $nm=$_POST['nm']; $page_num=$_POST['page_num']; //データベースに接続 if (!$conn =mysql_connect("","user","PASS")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("table", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select id,name from table " ; $sql.= "where name like '%$nm% ' order by id " ; $sql.="limit" . $page_num * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr><td>id</td><td>name</td></tr>" ; while($row = mysql_fetch_array($res)){ echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "</tr>" ; } echo "</table>" ; //検索条件に該当する全データの件数取得 $sql = "select count(*) from member " ; $sql.="where name like '% $nm % ' order by id " ; 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_num + 1, "ページ目を表示<br>"; //前の10件 if ($page_num !=0) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num -1..">"; echo "&lt 前の10件"; } //次の10件.--ここからエラー行ですが、、解決策がわかりません。。 if (($page_num+1)*10<$cnt) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num +1..">"; echo " 次の10件 &g</a>t"; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </body> </html> すみませんが、ご存知の方いましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 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
  • 読み込んだファイル中の文字列を、DBで取得した値に置換したい

    読み込んだhtmlファイルにある文字"AAAA"を、DBから取得したデータ(id順に並べた上位5件)に 置換したいのですが、下記ソースを実行した結果、何も表示されなくなってしまいました。 $sql = "SELECT * FROM table1 ORDER BY id DESC LIMIT 5;"; $res = mysql_query($sql, $conn) or die("エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); while(!feof($file)) { $string = fgets($file); foreach($row as $key => $value) { $buffer = str_replace("AAAA", $value, $string); } echo $buffer; } fclose($file); mysql_close($conn); PHP勉強中のため、解決策がなかなか見当たりません・・・ 見苦しいソースで申し訳ありませんが、解決策をご回答いただければと思います。 よろしくお願い致します。

    • ベストアンサー
    • PHP