- ベストアンサー
sqlの検索結果件数は出るのですがwarningが出てしまいます
緊急に直さなければならないのですが、私の知識では万策尽き、とても困っています。 環境はRedHat7.3でmysqlコマンドをPHPから実行しています。 複数のレコードをselect文で検索した後に、それぞれのフィールドの’A'の個数を求めるのが目的です。しかし、ひとつのレコードに、ware_name1、ware_name2、ware_name3 ・・・・・・・・ ware_name100 というフィールドが100も有り、それぞれが’A'を持つ可能性があるので、フィールド名最終部の数字部分を変数$iとし、1++で変えることにより、ループで処理をしています。 計算結果自体は、正解なのですが、どうしても下記のようなWarningメッセージが出てしまいます。 よろしくお願いします。 Warning: Supplied argument is not a valid MySQL result resource in ware_amount.php on line 7 1: $ware_amount = 0; 2: 3: for ($i=0; $i<100; $i++) { 4: $num_row = 0; 5: $sql = "select * from sales where ware_name$i = 'A'" ; 6: $result = mysql_query($sql, $con); 7: $num_row = mysql_num_rows($result); 8: 9: $ware_amount = $ware_amount + $num_row; 10: }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 6: $result = mysql_query($sql, $con); のあとで if($result){ 7: $num_row = mysql_num_rows($result); 8: 9: $ware_amount = $ware_amount + $num_row; } では、駄目でしたっけ? または、 > "select * from sales where ware_name$i = 'A'" ではなく "select COUNT(*) from sales where ware_name$i = 'A'" で件数を取得するようにしましょう。
その他の回答 (3)
- selenity
- ベストアンサー率41% (324/772)
# う~、しまった、、、、 #3さんの言う通り、mysql_result()で取れます。 または、 select COUNT(*) as cnt from sales where ware_name$i = 'A' のように「~ as xxx」とエイリアスを書けば、 mysql_fetch_array()やmysql_fetch_row()で連想配列に取得できます。
お礼
selenityさん ありがとうございました! わからないことばかりです。 みなさん、親切でとても助かりました。 本当にありがとうございました!
- GuruGuru22
- ベストアンサー率51% (177/346)
#1です。 $num = mysql_result($result,0); とか。 あー、ポイントは#2の方にどうぞ。 あと、余計なお世話だけど フィールドが商品別(?)に100もあるなんて 設計考え直した方がいいですよ。 質問者さんひとりで変更できる問題では ないかもしれませんが。
お礼
GuruGuru22さん、 上手くいきました!! ありがとうございます!!
- GuruGuru22
- ベストアンサー率51% (177/346)
とりあえず $sqlと$resultの中身を var_dumpとかで確認する。 気になるのは >しかし、ひとつのレコードに、ware_name1、ware_name2、 >ware_name3 ・・・・・・・・ ware_name100 という >フィールドが100も有り と言いつつ、3行目のループ文は$i、0からはじまって、 99で終わってるけど、これでいいの?
お礼
GuruGuru22さん ご解答ありがとう御座いました。for文よく無かったです。ご指摘ありがとう御座いました。
お礼
ありがとうございました~!
補足
selenityさん ありがとうございます。上のやり方でとても上手くいきました!! 実は下の"select COUNT(*) from sales where ware_name$i = 'A'"はこちら投稿前にやってみたんです。それで上手くいかなくて今回のやり方をしたのです。上手くいかなかった理由はselect count(*)文の結果の"数値"をPHP上で上手く取り込めなかったからです。初歩的な質問ですいません。でもcount(*)が使えれば一番良い方法ですので、ぜひ方法を教えてください。 例えば下で、「mysql_*****」の部分の記述は何とすれば良いのですか?私の記述方法がきっと悪かったのだとは思うのですが、試したものは全て失敗したのです。 5: $sql = "select (*) from sales where ware_name$i = 'A'" ; 6: $result = mysql_query($sql, $con); 7: $num = mysql_*****($result);