一次更新多个MySQL行

时间:2013-04-23 11:12:01

标签: php mysql

以下是该方案:

当顾客首先下订单时,表格为空;看起来像这样

+----+------+---------+
| no | item | results |
+----+------+---------+

下订单后,表格如下所示

+----+--------+---------+
| no | item   | results |
+----+--------+---------+
| 1  | Test 1 | null    |
| 2  | Test 2 | null    |
| 3  | Test 3 | null    |
+----+--------+---------+

这很容易。我可以在VALUE查询中使用逗号分隔的INSERT子句。

然后将订单发送到实验室,当实验室工作人员完成工作后,表格就像这样:

+----+--------+---------+
| no | item   | results |
+----+--------+---------+
| 1  | Test 1 | Res 1   |
| 2  | Test 2 | Res 2   |
| 3  | Test 3 | Res 3   |
+----+--------+---------+

这是你的答案所在。我需要用结果更新测试。但是我真的不想做几十个UPDATE--SET--WHERE语句,每个测试项一个。还有其他办法吗?

4 个答案:

答案 0 :(得分:3)

根据存储引擎限制等,您可以使用 insert on duplicate

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

这允许您使用插入查询,如果行已存在,则更新值。

这样的东西
insert into table (no, item, result) values(1, "A", "B") on duplicate key update item=values(item), result=values(result)

还有 REPLACE INTO

http://dev.mysql.com/doc/refman/5.0/en/replace.html

其中一个应该符合您的需要。

答案 1 :(得分:1)

您可以在其中创建另一个表格和INSERT值:

+----+---------+
| no | results |
+----+---------+
| 1  | Res 1   |
| 2  | Res 2   |
| 3  | Res 3   |
+----+---------+

然后只有一个更新:

UPDATE
    t1
SET
    results = t2.results
INNER JOIN
    t2
ON t1.no = t2.no

答案 2 :(得分:1)

INSERT INTO ... ON DUPLICATE KEY UPDATE

表必须具有唯一键。它比单行更新更快。

答案 3 :(得分:0)

不幸的是(据我所知),您无法在单个SQL查询中执行多个唯一更新。

您可以在单个查询中更新多个行,但每个行都会获得相同的更新。

每次更新都需要作为自己的声明来完成。

您最好的选择是编写一个更新单行的循环,并为每个需要完成的更新运行。