我在表中有很多列,需要根据某些值进行检查,如果找到匹配项,则需要替换值..
所以基本上我正在寻找一个查询,它将列名作为变量排序并遍历表并更新列值(如果匹配)..
我可以用 php 做到这一点,查询与列一样多..但这就是我不想要的..
ps 我知道这是一个糟糕的设计,在正常情况下不会出现这样的要求,但遗憾的是它就是这样......
在许多声明中:
UPDATE tableX
SET col_1 = 'newvalue'
WHERE col_1 = 'ram';
UPDATE tableX
SET col_2 = 'newvalue'
WHERE col_2 = 'ram';
...
UPDATE tableX
SET col_N = 'newvalue'
WHERE col_N = 'ram';
在一份声明中
UPDATE tableX
SET col_1 = CASE WHEN col_1 = 'ram'
THEN 'newvalue'
ELSE col_1
END
, col_2 = CASE WHEN col_2 = 'ram'
THEN 'newvalue'
ELSE col_2
END
...
, col_N = CASE WHEN col_N = 'ram'
THEN 'newvalue'
ELSE col_N
END
;
您可以手动或使用动态 SQL 编写语句(如果要工作的列和表太多)。
这是另一个错误的问题,字面的回答是没有用的。
如果您需要这样的循环,那么您的数据库设置肯定是错误的。
一列必须包含不同的值,而不是在其他列之间共享。
如果您尝试实现某种一对多关系,则必须将这些双列移动到单独表中的列中。
UPDATE tablename SET columnname = 'newvalue' WHERE columnname = 'currentvalue';
更新
这个 PHP 脚本将遍历每个列名并将查询应用到它
<?php
$result = mysql_query("SHOW COLUMNS FROM tablename ");
while ($row = mysql_fetch_assoc($result)) {
mysql_query("UPDATE tablename SET ".$row['field']." = 'newvalue' WHERE ".$row['field']." = 'currentvalue'");
}
?>
在 php 中创建它,我将创建列数组,值对 form column=value
,一个用于旧值,一个用于新值,然后分解这个数组,这样查询看起来像
"UPDATE table SET ".explode(',', $newvalues)." WHERE ".explode(' AND ', $oldarray)
http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html
您可以使用该 SHOW TABLE STATUS ... 命令在 php 中获取表结构,然后从结果中构建一个更新命令,该命令使用匹配的数据更新每一列以进行更改。
它可以通过使用 SHOW TABLE STATUS LIKE ... 或 SHOW TABLE STATUS WHERE name = ... 来获取您想要的表