2

4 つのセル ( ABCD) があります。それらが空の場合は更新する必要がありますが、すべてを同時に更新する必要はありませAん。 、空の場合はそこに10を入れてください。また、これは他の最後の2つのセルに割り当てられる可能性があります.1つのセルが更新された場合、他の3つのセルを更新する必要はありません.すべてのセルがINSERT INTO ()VALUES(10)よりもいっぱいである場合.AABCDtableA

私が行ったものですが、すべてのセルを更新しているため、間違ったクエリです:

mysql> UPDATE `mytable` SET `A`=10,`B`=10,`C`=10,`D`=10 WHERE `A` IS NULL OR `B` IS NULL OR `C` IS NULL OR `D` IS NULL LIMIT 1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0

助けを願っています。

更新され たのは、プログラムの論理的な問題のようです。まず、すべてのセルを SELECT する必要があります。このクエリは次のようになります。

mysql> SELECT `A`,`B`,`C`,`D` FROM `mytable` WHERE `A` IS NULL OR `B` IS NULL OR `C` IS NULL OR `D` IS NULL LIMIT 1;

そしてその後、次のステップを実行します。

4

2 に答える 2

1

あなたのデータ構造は特に奇妙に思えます。別の構造を使用すると、より良い方法で目的の結果が得られるのではないでしょうか? ただし、モデル化しようとしている問題に関する詳細情報がなくても、次のように言及した更新を実行できます。

LOCK TABLES mytable WRITE;

INSERT INTO `table` (A) SELECT 10 FROM mytable WHERE
  A IS NOT NULL AND B IS NOT NULL AND C IS NOT NULL AND D IS NOT NULL;

UPDATE mytable SET
  D = IF(A IS NOT NULL AND B IS NOT NULL AND C IS NOT NULL AND D IS NULL, 10, D),
  C = IF(A IS NOT NULL AND B IS NOT NULL AND C IS NULL, 10, C),
  B = IF(A IS NOT NULL AND B IS NULL, 10, B),
  A = IF(A IS NULL, 10, A);

UNLOCK TABLES;
于 2012-06-10T06:20:52.950 に答える
0

次のようなことができます:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO <table> 
 VALUES (1, 2, 3 ,4) 
 ON DUPLICATE KEY
UPDATE a=1,b=2,c=3,d=4

しかし、これはあなたの目的には役立たないと思います。PHPまたはサーバー側の言語のみでロジックを作成する必要があります。

于 2012-06-10T06:10:42.880 に答える