電子書籍の厳選無料作品が豊富!

緊急に直さなければならないのですが、私の知識では万策尽き、とても困っています。

環境は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: }

A 回答 (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'"
で件数を取得するようにしましょう。

この回答への補足

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);

補足日時:2004/07/12 20:08
    • good
    • 0
この回答へのお礼

ありがとうございました~!

お礼日時:2004/07/15 19:29

# う~、しまった、、、、


#3さんの言う通り、mysql_result()で取れます。

または、

select COUNT(*) as cnt from sales where ware_name$i = 'A'

のように「~ as xxx」とエイリアスを書けば、
mysql_fetch_array()やmysql_fetch_row()で連想配列に取得できます。

参考URL:http://jp.php.net/mysql_fetch_array,http://jp.ph …
    • good
    • 0
この回答へのお礼

selenityさん

ありがとうございました!

わからないことばかりです。
みなさん、親切でとても助かりました。

本当にありがとうございました!

お礼日時:2004/07/15 19:47

#1です。


$num = mysql_result($result,0);
とか。

あー、ポイントは#2の方にどうぞ。

あと、余計なお世話だけど
フィールドが商品別(?)に100もあるなんて
設計考え直した方がいいですよ。
質問者さんひとりで変更できる問題では
ないかもしれませんが。
    • good
    • 0
この回答へのお礼

GuruGuru22さん、

上手くいきました!!

ありがとうございます!!

お礼日時:2004/07/15 19:44

とりあえず


$sqlと$resultの中身を
var_dumpとかで確認する。

気になるのは
>しかし、ひとつのレコードに、ware_name1、ware_name2、
>ware_name3 ・・・・・・・・ ware_name100 という
>フィールドが100も有り
と言いつつ、3行目のループ文は$i、0からはじまって、
99で終わってるけど、これでいいの?
    • good
    • 0
この回答へのお礼

GuruGuru22さん

ご解答ありがとう御座いました。for文よく無かったです。ご指摘ありがとう御座いました。

お礼日時:2004/07/12 20:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!