2

我有 4 个单元格(A, B, C, D),如果它们是空的,我需要更新它们,但不是同时更新它们,例如:如果为空A而不是更新A-> 设置为 10,如果A已满,则检查B单元格,如果它是空的,则放 10 个,这也可能分配给其他最后两个单元格CD如果更新了 1 个单元格,则不需要更新其他 3 个单元格,如果所有单元格都比 INSERT INTO table ( A) VALUES(10) 满。

我做了一个,但这是错误的查询,因为它正在更新所有单元格:

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

希望得到帮助。

更新 似乎真的是程序中的逻辑问题,首先我需要选择所有单元格,这个查询将是这样的:

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 回答