私のコードでは、いくつかのデータを更新するためにforeachループを通してCASE WHEN文を作成します。一度に大きな更新要求がありますか?
私は100行以上のステートメントで終わるかもしれませんが、このような大規模な更新要求を一度に使用することが安全かどうかは疑問です。代わりに私の要求を小さな塊に分けるべきですか?
基本的にテーブルが次のように構成されています
CREATE TABLE 'table_example' (
'id' INT UNSIGNED NOT NULL ,
'attr_1' INT UNSIGNED NOT NULL ,
'attr_2' INT UNSIGNED NOT NULL ,
'attr_3' DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,
'attr_4' DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,
'attr_5' TINYINT UNSIGNED NOT NULL ,
'attr_6' TINYINT UNSIGNED NOT NULL ,
'attr_7' TINYINT UNSIGNED NOT NULL ,
'attr_8' SMALLINT UNSIGNED NOT NULL ,
'attr_9' VARCHAR(50) NOT NULL ,
'attr_10' SMALLINT UNSIGNED NOT NULL ,
'attr_11' TINYINT(1) UNSIGNED NOT NULL ,
'attr_12' TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
INDEX 'idx_id' ('id' ASC))
ENGINE = MyISAM DEFAULT CHARSET=utf8;`
が一度構築され、文は次のようなものに見えるかもしれませんCASE:MySQLでの私の経験では
CASE attr_1
WHEN id = 1 THEN 5
WHEN id = 2 THEN 8
... // could be hundreds more lines here
ELSE attr_1
END,
CASE attr_2
WHEN id = 1 THEN 96
WHEN id = 2 THEN 45
... // could be hundreds more lines here
ELSE attr_2
END,
... // and so on for each attribute`
テーブル構造、使用されたストレージエンジン、および使用されたクエリを知らなくても、私たちはアンサーできません。 –
あなたが求めるデータを追加しました。あなたは今、投稿でそれをチェックすることができます。 – Duddy67
case文をビルドして使用することは、あなたがしようとしていることを行う正しい方法であるとは思われません。 attr_、id&intの三つ組の表を塗りつぶし、結合ごとに更新します。さらに、intを取得することのどれが有益にDBMSで行うことができるのか不思議に思うかもしれません。 – philipxy