• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP+MYSQL IF文の初歩)

PHP+MYSQL IF文の初歩

shimixの回答

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.5

'りんご'とか'みかん'だとどういう順に読むんだろうと思ったら、実際は商品番号なんですね。「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
質問者

補足

最初の質問がわかりにくかったために、何度もお手間を取らし本当に申し訳ございません。 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 という、エラーになりました。 明日は休みなので、一日取り組んでみるつもりですが、 もしできましたら、再度アドバイスをいただけると助かります。 何卒お願いいたします。

関連するQ&A

  • POSTGRESQLデフォルトのシーケンス値を強制

    以下の(2)(3)のaをデフォルトであるシーケンスの値を強制入力しエラーを回避する方法はありますか? create sequence testseq start 1; create table test(a int not null default nextval('testseq'), b int); --(1)成功 insert into test (b) values(0); --(2)エラー insert into test (a,b) values(null,0); --(3)エラー insert into test values(null,0);

  • DOSプロンプトから一度に登録させる方法

    WindowsXPに Oracle10gの無料版が入っています。 テーブルは既に作成しているのですが、データをインポートさせたく SQLを列記してDOSプロンプトから一度に登録させたいのですが、どのようにコマンドすればよいのでしょうか? sqlplusでログイン create table yaoya ( namae varchar2 (100) shohin varchar2 (100) num number (8,2) ); でテーブル作成している。 test.sqlを以下のように作成しました。 insert into yaoya (namae, shohin, num) values ('田中', 'りんご', 10); insert into yaoya (namae, shohin, num) values ('田中', 'みかん', 8); insert into yaoya (namae, shohin, num) values ('田中', 'バナナ', 15); insert into yaoya (namae, shohin, num) values ('伊藤', '梨', 12); insert into yaoya (namae, shohin, num) values ('伊藤', 'イチゴ', 20); insert into yaoya (namae, shohin, num) values ('伊藤', 'メロン', 1); insert into yaoya (namae, shohin, num) values ('松田', 'スイカ', 3);

  • PHP/MySQL INSERT文について。

    PHP/MySQL INSERT文について。 こんばんは。 PHP・MySQLでデータベースへデータの書き込みを試行錯誤しております。 そこで一つどうしても解決出来ない問題(謎)があるので質問させて頂きます。 簡易的な質問内容としては 全てのカラムに対する値の挿入は可能なのに カラムを指定して値を挿入しようとしたらエラーが出ます。 データベースの設定はテーブル名【TESTtable】 フィールド 種別 NULL 属性/その他 AAA int(6) No UNSIGNED ZEROFILL / auto_increment BBB int(4) Yes CCC int(4) Yes DDD int(4) Yes PHPでのSQL実行文をしてはの記述としては(値は全て可変で数値を代入します。) INSERT INTO TESTtable VALUES (last_insert_id(),50,600,50) とした場合は問題無くテーブルに書き込みされますが カラムを指定して INSERT INTO TESTtable (AAA,BBB,CCC,DDD) VALUES (last_insert_id(),50,600,50) とした場合、書き込みが行われません。 INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable (AAA,'BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),'50','600','50') 等、色々試してみましたが不可能でした。 カラムAAAはauto_incrementにりますので毎回書き込みされますが BBB、CCC、DDDは書き込みが不要の場合もあるので カラム指定の書き込みは必須となるのですが・・・行き詰ってしまいました・・・。 ご教授頂ければ幸いです。 どうぞ、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • Using temporary; Using filesort を回避したい

    はじめまして。よろしくお願いします。 下記の場合、Using temporary; Using filesort を回避するには どうしたらよいでしょうか。 次の 2 つのテーブルがあります。 CREATE TABLE `test1` ( `f1` int(11) NOT NULL, `f2` int(11) NOT NULL, PRIMARY KEY (`f1`,`f2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test1` VALUES ('1', '2'); INSERT INTO `test1` VALUES ('1', '3'); INSERT INTO `test1` VALUES ('1', '4'); INSERT INTO `test1` VALUES ('2', '1'); INSERT INTO `test1` VALUES ('2', '3'); CREATE TABLE `test2` ( `f1` int(11) NOT NULL, `f2` varchar(20) default NULL, `f3` varchar(20) default NULL, PRIMARY KEY (`f1`), KEY `ix_f2_f3` (`f2`,`f3`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test2` VALUES ('1', 'A', 'a'); INSERT INTO `test2` VALUES ('2', 'B', 'b'); INSERT INTO `test2` VALUES ('3', 'C', 'c'); INSERT INTO `test2` VALUES ('4', 'D', 'd'); 次の SELECT を実行すると Using temporary; Using filesort が 現れてしまいます。 explain select test2.f2, test2.f3 from test1, test2 where test1.f1 = 1 and test1.f2 = test2.f1 order by test2.f2, test2.f3; order by ... をなくすと問題ないのですが、ソートは必要です。 複数のキーに対してORDER BYを実行する場合 インデックスを使用できないとあるので ix_f2_f3 は使用されず Using filesort となるのはわかるのですが、 Using temporary となる理由と回避方法がわかりません。 ご教示よろしくおねがいいたします。

  • MySQL SELECTの指定について

    まず、御覧頂きありがとうございます。 早速質問なのですが、 CREATE TABLE `hoge` ( `id` int(8) NOT NULL, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `hoge` (`id`, `name`) VALUES (1, 'hogeA'), (2, 'hogeB'), (3, 'hogeC'), (4, 'hogeD'); CREATE TABLE `test` ( `id` int(8) NOT NULL, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test` (`id`, `name`) VALUES (1, 'testA'), (4, 'testD'); という値が入ってるテーブルがあるとします。(長くなってすみません) で、 hoge.id と test.id が重複した場合 test.name を表示させたいです。 期待値としては id,name 1.testA 2,hogeB 3,hogeC 4,testD になります。 業務でJoinを使うようなテーブル構造にそもそもしないというのもあり、クリティカルなSQLコードに不慣れで御知恵を借りたく質問させて頂きました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQL初心者

    -mysql CREATE DATABASE testdb; use testdb; CREATE TABLE car_table(id int(10),name varchar(50)); INSERT INTO car_table VALUES (2,'乗用車'); INSERT INTO car_table VALUES (3,'オープンカー'); INSERT INTO car_table VALUES (4,'トラック'); SELECT * FROM car_table; これで間違ってるとは思わないんですが、なぜか ERROR 1049(42000): Unknown database 'testdb・・ とでます。なぜなんでしょうか?全然わかりません。 何かの設定ミスかなにかでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLから取り出したものを3つに分ける

    MySQLに以下のようなSQLを打ちました。 create table table_list( id int, task varchar(255) ); insert into table_list values(1,'ほげほげ1-1'); insert into table_list values(1,'ほげほげ1-2'); insert into table_list values(2,'ほげほげ2-1); insert into table_list values(2,'ほげほげ2-2'); insert into table_list values(3,'ほげほげ3-1'); そして、空のdiv要素が3つあります。 このデータベースからidの数値別に、div要素へtaskの文字列を入れたいのですが、どうすればいいのでしょうか? SQLで「select * from table_list」をやってからtaskを取り出すのか、3回SQLで「select task from table_list where id=1」のようにするのがよろしいんでしょうか?

    • ベストアンサー
    • PHP
  • MySQLのCHECK制約がうまくいきません。

    scoreカラムに1から100までの整数しか入らないようにするには どうしたらいいですか? MySQLのバージョンは、5.0.51 です。 以下の文は、なんのエラーもなく、INSERTされてしまいます。 CREATE TABLE scores (   score  INT NOT NULL,   CHECK ( score BETWEEN 1 AND 100 ) ) ENGINE = InnoDB; INSERT INTO scores (score) VALUES (1000); どう書けばいいのでしょうか? もしくは、MySQLのCHECK制約について詳しく書かれたページはないでしょうか?

    • ベストアンサー
    • MySQL
  • mysql の insert文のクォーテーションについて

    インサート文を作るとき、 INSERT INTO shitumon (  title_question,  komari_level )VALUES(  'mysql の insert文のクォーテーションについて',  '2' ) のように、int系のデータに''とクォーテーションつけても 問題ないのでしょうか? int系のデータのクォーテーションは外しておくのが望ましいのでしょうか?

    • ベストアンサー
    • MySQL
  • SQL文にて順位表をつくりたい

    create table team(team_id int not null primary key,team_name varchar(30),year int(4), leagueid int(32) ); insert into team values(1,"A",2012,1),(2,"B",2012,1),(3,"C",2012,1),(4,"D",2012,1),(5,"A",2012,2),(6,"B",2012,2),(7,"C",2012,2),(8,"D",2012,2),(9,"A",2011,1),(10,"B",2011,1),(11,"C",2011,1),(12,"D",2011,1); create table taisen(id int not null primary key auto_increment,hometeam int,homepoint int,awayteam int,awaypoint int); insert into taisen (hometeam,homepoint,awayteam,awaypoint) values(1,3,2,2),(3,1,4,0),(1,0,3,2),(2,2,4,2),(1,1,4,2),(2,0,3,0),(2,1,1,2),(4,1,3,3),(3,5,1,2),(5,3,6,3),(5,1,7,1),(7,1,8,1),(9,1,10,1),(11,1,12,3); データベース内にデータがあったときに年やleague_idごとに順位表を作りたいのですが、どのようにSQL文を書いてよいかわからず困っています。 理想はこのような感じです。 http://soccer.yahoo.co.jp/ws/standing/?l=52 お分かりの方がいらっしゃいましたらご教授お願いいたします。

    • ベストアンサー
    • MySQL