人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のようなテーブルを作成して
CREATE TABLE IF NOT EXISTS `TEST1` (
`ID` varchar(15) NOT NULL DEFAULT '',
`DATE_PARAM` date NOT NULL DEFAULT '0000-00-00',
`PRICE` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`DATE_PARAM`)
) ENGINE=MyISAM DEFAULT CHARSET=ujis;ID

PRIMARYの場合にPRICEの値が、
格納されている値より
安い場合だけ更新したいです。
それ以外の場合は、INSERTしたいです。

以下のSQLに条件文など足せるのでしょうか?
INSERT INTO TEST1
(ID,DATE_PARAM,PRICE)
VALUES (1,'2009-01-19',100) ON DUPLICATE KEY UPDATE PRICE=100

わかる方いましたら、よろしくお願いします。

●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:00 ENGINE Key MyISAM ON
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● mikuni1966
●10ポイント

DBの種類やバージョンの記載がないと回答得られなくないでしょうか?

あと気になったのですが

PRICEの値が格納されている値より安い場合だけ更新・・となっていますが

SQL文の例で PRICE=100 って書かれると 安い場合 じゃないのでは?

◎質問者からの返答

あ、すいません。

DBのバージョンは、MYSQL5.2です。

SQL文の例はON DUPLICATE KEY UPDATEで処理を

行いたいので、書いてみました。

それと、ちょっと付け足しが足りなかったですね。

すいません。

TEST1には

IDが1でDATE_PARAMが2009-01-19でPRICEが50というのが入ってます。

なので、上記SQLを実行すると、50が100に変わらないようにするには

どうしたらいいでしょうか??

INSERT INTO TEST1

(ID,DATE_PARAM,PRICE)

VALUES (1,'2009-01-19',40) ON DUPLICATE KEY UPDATE PRICE=40

の場合は50が40に変更。

よろしくお願いします。


2 ● きゃづみぃ
●10ポイント

問題点があります。

高い場合は、INSERTしたいとありますが、その場合、既にプライマリーキーは存在することになります。

(安いほうで)

そこに 高い金額のものを INSERTすると ユニークで エラーになりませんでしょうか?

IDを更新して INSERTするのでしょうか?

◎質問者からの返答

あ、間違えてますね。

質問が。。。

すいません。

基本的に、PRIMARYで安い値段を更新したいだけです。


3 ● chuken_kenkou
●60ポイント

要件が分かりにくいですが、

(id,date_param)の主キー値で、

  1. 行が存在しなければ格納
  2. 行が存在していた場合、price値が最小となる場合は更新
  3. 行が存在していた場合、price値が最小とならなければ何もしない

という感じでいいでしょうかね?



1.最小値でないので、更新は発生しない例

insert into test1(id,date_param,price) 
 values('1','2009-01-19',100)
 on duplicate key update price=least(price,values(price))


2.最小値なので、更新が発生する例

insert into test1(id,date_param,price) 
 values('1','2009-01-19',40)
 on duplicate key update price=least(price,values(price))


3.新規の行で、追加が発生する例

insert into test1(id,date_param,price) 
 values('4','2009-01-19',100)
 on duplicate key update price=least(price,values(price))

なお、上記のon duplicate key updateでは、次の操作をしています。

◎質問者からの返答

まさしく、このSQLです。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ