• ベストアンサー
  • 困ってます

PHP+MYSQL IF文の初歩

  • 質問No.3754236
  • 閲覧数937
  • ありがとう数1
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 21% (19/90)

全く初歩の質問で申し訳ございません。

create table test (shohin char(40),uri int(10) ,kai int(10) ,urikai char(40));
insert into test values('りんご',300,200,'黒字');
insert into test values('みかん',500,300,null);
insert into test values('ぶどう',null,null,'未入荷');

で 「みかん」のレコードが、uri > kai なら 「みかん」のurikaiを'黒字'にする方法を IF文でどのように書けばよいのかを教えてください。

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

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

ベストアンサー率 54% (865/1590)

'りんご'とか'みかん'だとどういう順に読むんだろうと思ったら、実際は商品番号なんですね。「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である最初の商品を黒字にして処理を抜けます。

#最初の質問から読み取れた内容とはかなり隔たっている気がしますが(汗
補足コメント
Scipio93

お礼率 21% (19/90)

最初の質問がわかりにくかったために、何度もお手間を取らし本当に申し訳ございません。

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
という、エラーになりました。
明日は休みなので、一日取り組んでみるつもりですが、
もしできましたら、再度アドバイスをいただけると助かります。
何卒お願いいたします。
投稿日時:2008/02/08 23:56

その他の回答 (全5件)

  • 回答No.6

ベストアンサー率 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)) {

に修正してみてください。
補足コメント
Scipio93

お礼率 21% (19/90)

ありがとうございます。
エラーは解消されました。
しかし、「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;
}

?>
投稿日時:2008/02/09 08:12
お礼コメント
Scipio93

お礼率 21% (19/90)

$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;
}

にて無事できました。
本当にありがとうございました。
本来自分のような素人は
まだコードを書いてはいけないのだと実感しました。
しかし、本だけ読んでいてもよくわからないので、
自分の商売に使うプログラムに挑戦しながら
勉強しようと思っています。
今後ともよろしくお願いいたします。
投稿日時:2008/02/10 23:54
  • 回答No.4

ベストアンサー率 54% (865/1590)

テーブルの内容を変えたいというだけなら

  $sql = "update test set urikai='黒字' where (uri>kai)";
  mysql_query($sql);

だけでいいのでは?(これも「みかん」限定にするならwhereにandで追加してください)


(蛇足)
mysql_db_queryは廃止予定のハズです。DBを選択する必要があるのなら、接続したあとでmysql_select_dbを使ってください。
補足コメント
Scipio93

お礼率 21% (19/90)

$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が黒字となる)

このようにするにはどうしたらよいでしょうか。
何度も申し訳ございませんが、何卒よろしくお願いいたします。
投稿日時:2008/02/08 19:32
  • 回答No.3

ベストアンサー率 51% (3827/7415)

前から順に評価されるので以下でいけるんじゃないですか?

insert into test values('みかん',500,300,IF(uri>kai,'黒字',NULL));
補足コメント
Scipio93

お礼率 21% (19/90)

ありがとうございます。
こういう方法で結果を出すことができるのですね。
大変勉強になりました。

しかし、今回はANo.3に補足させていただいた内容のことがしたいものですから、そちらの方を何卒アドバイスください。よろしくお願いいたします。
投稿日時:2008/02/08 13:52
  • 回答No.2

ベストアンサー率 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などがあったら適宜修正してください)。
補足コメント
Scipio93

お礼率 21% (19/90)

ありがとうございます。
いろいろやってみましたが、うまくいきません。

<?
$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
と表示されます。

素人の質問で大変申し訳ございませんが、何卒よろしくお願いいたします。
投稿日時:2008/02/08 13:29
  • 回答No.1

ベストアンサー率 54% (865/1590)

selectするときにuriとkaiから判断できる項目をテーブルに持たなくてもいいと思いますが、そういうことではないのですか?

あるいはphpからinsert文を組み立てているのなら、その時点でnull/黒字を分ければいいし・・

あえてinsert文の中で難しいことをする意図がわかりません。そのあたりの説明をお願いします。
補足コメント
Scipio93

お礼率 21% (19/90)

早速ありがとうございます。
test テーブルはダミーでございます。
実際は全く違うものですが、
例としてお考え下さい。

上記のような固定したデータがあり、
それを翌日、「みかん」の部分だけを指定し
黒字かどうかを確認するために
PHPから命令を出すというIF文を
何卒よろしくお願いいたします。
投稿日時:2008/02/07 21:53
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ