MySQLでラジオボタン選択肢アンケートの件数を抽出する方法

このQ&Aのポイント
  • PHPとMySQLを使用して、ラジオボタン選択肢アンケートのデータをMySQLのテーブルに格納し、選択肢ごとの件数を抽出したいです。
  • 現在のコードでは、mysql_num_row()関数を使用して件数を抽出しようとしていますが、正しい結果が得られません。
  • forループを使用して、選択肢ごとに件数を抽出する方法を知りたいです。
回答を見る
  • ベストアンサー

mysql_num_rowを繰り返したい

ラジオボタン選択肢アンケートのデータをMySQLのテーブルに入れて、 mysql_num_row()で各選択肢の件数を抽出したいのですが。 選択肢は1~5の数値(int型)でanテーブルに入っています。 for ($i = 1; $ <= 5; $++) { $rst = mysql_query("SELECT * FROM an WHERE field=$i", $con); $kotae.$i = mysql_num_row($rst); } このように書くと 1の選択肢の数しか返してきません。しかも、件数が間違って返ってくる。  文法が間違っているからだと思うのですが。上記のようなことをやりたいのです。  forを使わないでやると、 $rst = mysql_query("SELECT * FROM an WHERE field=1",$con); $kotae1 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=2",$con); $kotae2 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=3",$con); $kotae3 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=4",$con); $kotae4 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=5",$con); $kotae5 = mysql_num_rows($rst); です。  forを使って楽にやりたい場合はどうすればよいでしょうか 宜しくお願いいたします。

  • brosis
  • お礼率94% (100/106)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

みたかんじmysql_num_rows()ではなく SQLでcount(*)を使う方が効率的ですね・・・。 SELECT * FROM an WHERE field=1 ではなく SELECT field,count(*) AS count FROM an GROUP BY field どうしても今のままでやりたいならあまりお勧めはしませんが $kotae.$i = mysql_num_row($rst); のところを ${"kotae".$i} = mysql_num_row($rst); としてみてください。 そもそもforをつかうなら配列を使うべきですね。 $kotae[$i]=mysql_num_rows($rst); とすれば簡単に得られます。

brosis
質問者

お礼

早速のご回答ありがとうございます。 yambejpさんは、配列を使うべきだとおっしゃいました。 では、 for ($i = 1; $i <=5; $i++) { $rst = mysql_query("SELECT * FROM an WHERE field=$i",$con); $kotae[$i] = mysql_num_rows($rst); } とした場合、仮にfield=1 のmysql_num_rows()が21だったとしたら、 $kotae[1]には、21の10の位の2だけが入ってしまいます。 $kotae[1]に、21を入れるにはどうすればよいでしょうか?

関連するQ&A

  • mysql_num_rowsを使わず、SQL文のCOUNT関数で件数を得たい

    以下のサンプルを実行すればうまくいくのですが、 $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable where number = 10"; $rst = mysql_query($sql, $con); $countnum = mysql_num_rows($rst); echo $countnum . "件のレコードがありました。<br>"; ◆実行結果: 10件のレコードがありました。 「10件のレコードがありました。」という一行の実行結果を得たい目的なら、 三行目を「$sql = "select count(*) from mytable where number = 10";」 みたいにCOUNT関数を使っても結果が得られそうに思います。 というかむしろ、その方がコードが短くて済みそうな気がするのですけど。 その場合、4~6行目のPHPコードはどのように記述したらいいでしょうか。 echo $rst; としても、変な文字列を返してきました。

    • ベストアンサー
    • PHP
  • どちらが速いのか?mysql_num_rows

    どちらの処理が早くなりますか?またメモリの使用量はどちらが優れているのでしょうか? また、方法Bのクエリ実行は2回だと思いますが、方法Aはクエリの実行は一回と考えてもいいのでしょうか? PHPとMySQLの環境です。 また、評価のやり方も教えて頂ければ大変ありがたいです。 ■方法A $q = "SELECT key, a, b, c FROM d WHERE a < 1 AND b > 1 ORDER BY c"; $rs = mysql_query ($q); $row_num = mysql_num_rows ($rs); while ($data = mysql_fetch_array ($rs)) { echo $data[key] . $data[a] . $data[b] . $data[c]; } ■方法B $q_c = "SELECT COUNT(key) AS count FROM d WHERE a < 1 AND b > 1"; $rs = mysql_query ($q_c); $data = mysql_fetch_array ($rs); $row_num = $data[count]; $q = "SELECT key, a, b, c FROM d WHERE a < 1 AND b > 1 ORDER BY c"; $rs = mysql_query ($q); while ($data = mysql_fetch_array ($rs)) { echo $data[a] . $data[b] . $data[c]; } 是非宜しくお願い致します。

    • ベストアンサー
    • PHP
  • mysql_num_rowsなどのWarningの原因がわからない

    以下のプログラム、何が誤っているのでしょうか。 違う箇所で使ったPHPの使いまわし(そちらは問題なく動いている) なのですが、サーバー上で実行しても Warning: mysql_num_rows(): supplied argument is not a valid MySQL result ... Warning: mysql_free_result(): (以下同上) となり、どうしても原因が究明できません。。 以下、省略してますが、本質は変わりません。SQL文($sql)を phpMyAdminで通すとなんら問題なく問い合わせ結果が得られます。 <?php  $con = mysql_connect(localhost, username, pss);  $selectdb = mysql_select_db(mydb, $con);  $sql = "SELECT Kaisya FROM MYTABLE";  $rst = mysql_query($sql, $con);  $recmax = mysql_num_rows($rst);//■←この行がWarning■  $body = "<table border='1'>";  $body .= "<tr>";  $body .= "<td style=\"text-align: center;\">会社名</td>";  for ($recnum = 0; $recnum < $recmax; $recnum++) {   $col = mysql_fetch_array($rst);   $body .= "<tr>";   $body .= "<td>" . $col['Kaisya'] . "</td>";   $body .= "</tr>";  }  $body .= "</table>";  mysql_free_result($rst);//■←この行がWarning■  $con = mysql_close($con); ?> <html><head></head><body> <?= $body ?> </body></html>

    • ベストアンサー
    • PHP
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。

  • functionを使ってmysqlの指定を分けたい

    functionを使ってmysqlの指定を分けって、 分けたいのですが、どうしても $rst = mysql_query($mydbsql, $con_mydb); とこで、エラーが呼び出されてしまいどうしたらいいのかわかりません。 function my_sql_ini(){ require_once("mydb_ini.php"); $con_mydb = mysql_connect($MYDBSERVER, $MYDBUSER, $MYDBPASSWARD); $selectmydb = mysql_select_db($MYDBNAME, $con_mydb); $num = 0; $mydbsql = "select * from schedule_user"; $rst = mysql_query($mydbsql, $con_mydb); $num = mysql_affected_rows(); } function my_sql_user(){ my_sql_ini(); if($con_mydb){ print "ok"; } else { print "ng"; } } function user_display(){ my_sql_ini();   $mydbsql = "select * from schedule_user order by user_id"; if($con_mydb){ print "ok"; } else { print "ng"; } }

    • 締切済み
    • PHP
  • PHPとMySQLで配列で検索する方法

    プログラミング初心者です。 PHPとMySQLでデータベースを作成しています。 配列に格納したデータを既に登録してあるデータに参照して、日付と題名が同じものは登録しないようにしたいと思います。 以下がソースなのですが、2行目でエラーがでてしまいます。そうすればよいかご教授お願いします。 for($j=1; $j<$i; $j++){ $query ="select * from data where date=" . $date2[$j]; $result = mysql_query($query) or die(mysql_error()); $query2 ="select * from data where sub=" . $sub[$j]; $result2 = mysql_query($query2) or die(mysql_error()); if(mysql_num_rows($result) != 0 && mysql_num_rows($result2) != 0){ //登録しない } else{      //データベースに登録

    • 締切済み
    • PHP
  • Warning: mysql_num_rows()

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in と、phpでエラーが出ます。調べた結果クエリに問題があるということです。 クエリは $query = "select name,jyusyo,kakaku,gazou,link from kensaku order by kakaku asc"; です。なにがおかしいのでしょうか??カカクカラムを昇順に呼び出したいのですが。。。

    • ベストアンサー
    • MySQL
  • mysql_fetch_rowが 1 を返すことがある

    プログラムコードが多いのですべては載せられないのですが $rid = mysql_query($query = "select base from boards where base='$base'");//base は text型 $rid || die("$query :" . mysql_error() . "\n"); echo "rid: $rid \n"; if (! mysql_fetch_row($rid)) { // そんな行は無い場合の処理・・・ } という箇所で、ときどき rid: 1 Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /path/ to/htdocs/collect.php on line xx という警告が出ることがあります。 mysql_query()でselect文のクエリを発行した場合は成功時にリソースID、クエリ失敗時に FALSE を返すとマニュアルにはあります。 たしかに上記部分が正常に動作する場合は、 rid: Resource id #102 といったリソースIDが表示されます。 では単純に 1 を返す場合は何を意味しているのでしょうか?

    • ベストアンサー
    • PHP
  • PHP、MySQLのUpdateで数式の答えをそれぞれのセルに挿入

    こんにちは。PHPの初心者です。PHP内でのMySQL Updateの使い方で苦労しています。 table02に4つのフィールドがあります。このうちで使うのは「num」と「percent」です。結局、numにあるセルの数を一定数($total_num_rows)で割って100を掛けたいのですが。 $sql = "SELECT * FROM $table02"; $result = mysql_query($sql,$my_sql_connection) or die(mysql_error()); WHILE ($row = mysql_fetch_array($result)) { $num = $row["num"]; $percent = $num/$total_num_rows*100; $update_percent = "UPDATE $table02 SET percent = '$percent'"; $update_result = mysql_query($update_percent,$my_sql_connection); $percentをprintとすると、それぞれの行に適した数字が数式に従って表示されます。でも結局テーブル上では同じ数字が「percent」のフィールド下のセルに挿入されてしまいます。どうやったらそれぞれのセルにprintで表示されるような正しい数字を挿入することができるでしょうか? どうぞ宜しくお願いします。

    • 締切済み
    • PHP
  • 入門書のPHPサンプル内で、MySQL関数を使いたい

    環境:PHP5.0.3+MySQL4.0.14です。PHPどころか、プログラムも素人です。 検索結果をHTML表に一覧化する仕組みを作っているのですが WHERE条件に合致した数値データを平均化したり、 WHERE条件合致した日付データの書式を【MySQL関数によって】加工したいです。 それぞれ、mysql.exe(DOS窓上)での書き方はわかったものの (SELECT AVG(HOGE1) WHERE (HOGE <= 1) のように)、 これをPHPに組み込んだ際ににどう使えばわからないです。 今回使っているPHP入門書のサンプルは以下の通りです。ここで mysql_fetch_arrayに格納されたテーブル(カラム)を取り出しているらしい ことはわかりますが、以下のサンプルで加工したい対象である $col["DATE1"]、$col["HOGE1"]を $col["date_format(DATE1, '%y/%m/%d')"] や $col["AVG(HOGE1)"]などと してもだめみたいです。 以下の例で、これらを取り出すにはどのように記述したらいいでしょうか。 よろしくお願い致します。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "結果: $recmax 件"; $body .= "<table>"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<td>" . $col["DATE1"] . "</td>"; $body .= "<td>" . $col["HOGE1"] . "</td>"; $body .= "</tr>"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html> <head></head> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP