这让我快要上厕所了,请帮帮忙。
我正在尝试用数组更新Mysql表。
像这样的东西
$a = array('1', '2', '3');
foreach($a as $id){
mysql_query("UPDATE table SET id = '$id' WHERE column = 'something'") or die(mysql_error());
}因此,在更新之后,id列应该具有值1、2、3,而不是更新为1、1、1
不完全是我想要的。
谁能告诉我我做错了什么。
提前谢谢。
发布于 2011-01-28 00:10:17
你在真实的代码中改变你的where-statement吗?现在,您正在覆盖每一行,其中column = 'something‘,这意味着每一行都将每次更新,并以相同的内容结束。
编辑:回答评论
为此,您需要一个非静态的WHERE-statement。你可以在我的帖子中做一些类似编辑的事情...
$a = array('1' => 'something1', '2' => 'something2', '3' => 'something3');
foreach($a as $id => $where){
mysql_query("UPDATE table SET id = '$id' WHERE column = '$where'") or die(mysql_error());
}发布于 2011-01-28 00:11:39
foreach中的每个update语句每次都作用于同一行或同一组行。在您的示例中,您使用"where column = 'something'“。如果这在foreach循环的每次迭代中都没有改变,那么您将不断更新相同的行。
发布于 2011-01-28 00:10:39
我没有看到“where”条件在循环中发生变化。每次执行"WHERE column = 'something'“时,它都会匹配并替换所有行,覆盖以前每次更新时的ID。
更新:
我们中的一些人在同一时间写了类似的回复。我应该在“添加”之前再点击一次“刷新”。
无论如何,如果这是获取表上的连续ids的一次性修复,那么您可以使用直接的mysql来实现:
mysql> select * from foo;
+------+------+
| id | name |
+------+------+
| 0 | aaa |
| 0 | bbb |
| 0 | ccc |
| 0 | ddd |
+------+------+
4 rows in set (0.00 sec)
mysql> set @ct=0;
Query OK, 0 rows affected (0.00 sec)
mysql> update foo set id=(@ct:=@ct+1);
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from foo;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
+------+------+
4 rows in set (0.00 sec)如果愿意,可以使用“order by”,例如:
mysql> update foo set id=(@ct:=@ct+1) order by namehttps://stackoverflow.com/questions/4818712
复制相似问题