- ベストアンサー
PHP+MYSQL IF文の初歩
- PHPとMYSQLを使用して、IF文で特定の条件を満たす場合に特定の値を更新する方法について教えてください。
- PHPとMYSQLを使って、特定の条件を満たす場合に特定の値を更新する方法について教えてください。
- PHPとMYSQLでIF文を使って、特定の条件に基づいて値を変更する方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
'りんご'とか'みかん'だとどういう順に読むんだろうと思ったら、実際は商品番号なんですね。「2番の商品から」というのは商品番号(shohin)順で、黒字でも未入荷でもない(null)商品から・・と判断させていただくと $sql = "select * from test where urikai is null order by shohin asc"; $res = mysql_query($sql); if ($row = mysql_fetch_array($res)) { if ($row['uri'] <= $row['kai']) { continue; } $sql = "update test set urikai='黒字' where shohin == '". $row['shohin'] . "'"; mysql_query($sql) or die("update abort"); break; } } これで商品番号順で黒字をセットしていない(かつ未入荷でもない)けどuri>kaiである最初の商品を黒字にして処理を抜けます。 #最初の質問から読み取れた内容とはかなり隔たっている気がしますが(汗
その他の回答 (5)
- shimix
- ベストアンサー率54% (865/1590)
>Fatal error: Cannot break/continue 1 level in あ、ごめんなさい。whileでまわすところにifを書いてましたね(汗 > if ($row = mysql_fetch_array($res)) { while ($row = mysql_fetch_array($res)) { に修正してみてください。
お礼
$sql = "select * from test where urikai is null order by shohin asc"; $res = mysql_query($sql); while($row = mysql_fetch_array($res)) { if ($row['uri'] <= $row['kai']) { continue; } $sql2 = "update test set urikai='黒字'where shohin = '". $row['shohin'] . "'"; mysql_query($sql2) or die("update abort"); break; } にて無事できました。 本当にありがとうございました。 本来自分のような素人は まだコードを書いてはいけないのだと実感しました。 しかし、本だけ読んでいてもよくわからないので、 自分の商売に使うプログラムに挑戦しながら 勉強しようと思っています。 今後ともよろしくお願いいたします。
補足
ありがとうございます。 エラーは解消されました。 しかし、「update abort」が表示され データは変更されませんでした。 create table test (shohin char(40),uri int(10) ,kai int(10) ,urikai char(40)); insert into test values(1,400,200,'黒字'); insert into test values(2,300,500,null); insert into test values(3,400,300,null); insert into test values(4,500,300,null); select * from test; <? $dbHandle = mysql_connect("localhost","root","kya93"); if ($dbHandle == False) {print ("can not connect db\n");exit;} $dbname = "MyDB"; mysql_select_db($dbname); $sql = "select * from test where urikai is null order by shohin asc"; $res = mysql_query($sql); while($row = mysql_fetch_array($res)) { if ($row['uri'] <= $row['kai']) { continue; } $sql = "update test set urikai='黒字' where shohin == '". $row['shohin'] . "'"; mysql_query($sql) or die("update abort"); break; } ?>
- shimix
- ベストアンサー率54% (865/1590)
テーブルの内容を変えたいというだけなら $sql = "update test set urikai='黒字' where (uri>kai)"; mysql_query($sql); だけでいいのでは?(これも「みかん」限定にするならwhereにandで追加してください) (蛇足) mysql_db_queryは廃止予定のハズです。DBを選択する必要があるのなら、接続したあとでmysql_select_dbを使ってください。
補足
$sql = "update test set urikai='kuro' where (uri>kai) and (shohin = 'orenge')"; mysql_query($sql); にて出来ました。ありがとうございます。 実は、今回IF文の質問をさせていただきましたのは、下記のようなことがしたいからです。 create table test (shohin char(40),uri int(10) ,kai int(10) ,urikai char(40)); insert into test values(1,400,200,'黒字'); insert into test values(2,300,500,null); insert into test values(3,400,300,null); insert into test values(4,500,300,null); select * from test; このようなテーブルで 2番の商品からチェックを行い、 黒字ならそこでストップし、 そうでなければ、次の番号をチェックし、 黒字ならそこでストップ、 そうでなければ、次へというようにしたいのです。 (上記のテーブルなら3番のurikaiが黒字となる) このようにするにはどうしたらよいでしょうか。 何度も申し訳ございませんが、何卒よろしくお願いいたします。
- yambejp
- ベストアンサー率51% (3827/7415)
前から順に評価されるので以下でいけるんじゃないですか? insert into test values('みかん',500,300,IF(uri>kai,'黒字',NULL));
補足
ありがとうございます。 こういう方法で結果を出すことができるのですね。 大変勉強になりました。 しかし、今回はANo.3に補足させていただいた内容のことがしたいものですから、そちらの方を何卒アドバイスください。よろしくお願いいたします。
- shimix
- ベストアンサー率54% (865/1590)
>それを翌日、「みかん」の部分だけを指定し >黒字かどうかを確認するために >PHPから命令を出すというIF文を いや、ですから「それならurikaiという列は不要」だと・・ $kekka = ''; $sql = "select * from test where (shohin = 'みかん'); $res = mysql_query($sql); if ($row = mysql_fetch_array($res)) { if ($row['uri'] > $row['kai']) { $kekka = '黒字'; } } ※エラー処理など詳細は省略 黒字の商品だけ選択したければ $sql = "select * from test where (uri > kai); $res = mysql_query($sql); while ($row = mysql_fetch_array($res)) { print $row['shohin'] . "<br />\n";} } といった感じですかねぇ(未検証なのでtypoなどがあったら適宜修正してください)。
補足
ありがとうございます。 いろいろやってみましたが、うまくいきません。 <? $dbHandle = mysql_connect("localhost","root","password"); if ($dbHandle == False) {print ("can not connect db\n");exit;} $db = "MyDB"; $kekka = ''; $sql = "select * from test where (shohin = 'みかん')"; $res = mysql_db_query($db,$sql); if ($row = mysql_fetch_array ($res)){ if ($row['uri'] > $row['kai']) { $kekka = '黒字'; } } ?> でやらせていただきましたが、真っ白の画面になるだけです。 また、私のやりたいこととしましては、テーブルの数値を変更することですが、 <? $dbHandle = mysql_connect("localhost","root","password"); if ($dbHandle == False) {print ("can not connect db\n");exit;} $db = "MyDB"; $sql = "select * from test where (shohin = 'みかん')"; $res = mysql_db_query($db,$sql); if ($row = mysql_fetch_array ($res)){ if ($row['uri'] > $row['kai']) { UPDATE ($res) set urikai ='黒字';} } ?> とやってみましたが、 Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\xampp\mytest13f.php on line 10 と表示されます。 素人の質問で大変申し訳ございませんが、何卒よろしくお願いいたします。
- shimix
- ベストアンサー率54% (865/1590)
selectするときにuriとkaiから判断できる項目をテーブルに持たなくてもいいと思いますが、そういうことではないのですか? あるいはphpからinsert文を組み立てているのなら、その時点でnull/黒字を分ければいいし・・ あえてinsert文の中で難しいことをする意図がわかりません。そのあたりの説明をお願いします。
補足
早速ありがとうございます。 test テーブルはダミーでございます。 実際は全く違うものですが、 例としてお考え下さい。 上記のような固定したデータがあり、 それを翌日、「みかん」の部分だけを指定し 黒字かどうかを確認するために PHPから命令を出すというIF文を 何卒よろしくお願いいたします。
補足
最初の質問がわかりにくかったために、何度もお手間を取らし本当に申し訳ございません。 create table test (shohin char(40),uri int(10) ,kai int(10) ,urikai char(40)); insert into test values(1,400,200,'黒字'); insert into test values(2,300,500,null); insert into test values(3,400,300,null); insert into test values(4,500,300,null); select * from test; <? $dbHandle = mysql_connect("localhost","root","password"); if ($dbHandle == False) {print ("can not connect db\n");exit;} $dbname = "MyDB"; mysql_select_db($dbname); $sql = "select * from test where urikai is null order by shohin asc"; $res = mysql_query($sql); if ($row = mysql_fetch_array($res)) { if ($row['uri'] <= $row['kai']) { continue; } $sql = "update test set urikai='黒字' where shohin == '". $row['shohin'] . "'"; mysql_query($sql) or die("update abort"); break; } ?> をやってみましたが、 Fatal error: Cannot break/continue 1 level in という、エラーになりました。 明日は休みなので、一日取り組んでみるつもりですが、 もしできましたら、再度アドバイスをいただけると助かります。 何卒お願いいたします。