dポイントプレゼントキャンペーン実施中!

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

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文でどのように書けばよいのかを教えてください。

A 回答 (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である最初の商品を黒字にして処理を抜けます。

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

この回答への補足

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

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
    • good
    • 0

>Fatal error: Cannot break/continue 1 level in



あ、ごめんなさい。whileでまわすところにifを書いてましたね(汗

> if ($row = mysql_fetch_array($res)) {

 while ($row = mysql_fetch_array($res)) {

に修正してみてください。

この回答への補足

ありがとうございます。
エラーは解消されました。
しかし、「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
    • good
    • 0
この回答へのお礼

$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

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



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

このようにするにはどうしたらよいでしょうか。
何度も申し訳ございませんが、何卒よろしくお願いいたします。

補足日時:2008/02/08 19:32
    • good
    • 0

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



insert into test values('みかん',500,300,IF(uri>kai,'黒字',NULL));

この回答への補足

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

しかし、今回はANo.3に補足させていただいた内容のことがしたいものですから、そちらの方を何卒アドバイスください。よろしくお願いいたします。

補足日時:2008/02/08 13:52
    • good
    • 0

>それを翌日、「みかん」の部分だけを指定し


>黒字かどうかを確認するために
>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
と表示されます。

素人の質問で大変申し訳ございませんが、何卒よろしくお願いいたします。

補足日時:2008/02/08 13:29
    • good
    • 0

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



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

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

この回答への補足

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

上記のような固定したデータがあり、
それを翌日、「みかん」の部分だけを指定し
黒字かどうかを確認するために
PHPから命令を出すというIF文を
何卒よろしくお願いいたします。

補足日時:2008/02/07 21:53
    • good
    • 0

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