以下是该方案:
当顾客首先下订单时,表格为空;看起来像这样
+----+------+---------+
| 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
语句,每个测试项一个。还有其他办法吗?
答案 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查询中执行多个唯一更新。
您可以在单个查询中更新多个行,但每个行都会获得相同的更新。
每次更新都需要作为自己的声明来完成。
您最好的选择是编写一个更新单行的循环,并为每个需要完成的更新运行。