MySQL - 在所有行和列中替换整个表中的空间

时间:2014-09-15 23:49:38

标签: php mysql sql replace

好吧,也许这很简单,但我不能自己解决这个问题:

首先我有一个csv文件。 我正在导入这个 LOAD DATA LOCAL INFILE ...进入一个包含20列和10000多行的mysql表。

然后在某些行和列中有一些content =“”的字段,我想用“”代替。 我不知道,“”将在哪些列中,所以我想遍历整个表格。

所以我想到这样的事情: REPLACE INTO products (XXX) VALUE ("") WHERE XXX = " " ...其中XXX都是列名。

有人可以给我一些暗示吗? 也许我应该在php中做到这一点? 感谢。

[编辑]或者在导入csv文件时可能有办法吗?

[编辑]我只是想做UPDATE table SET column = "" WHERE column=" "。但我想要这一点,而不是为每一列写20个查询。

2 个答案:

答案 0 :(得分:1)

正如Mihai所提到的,您可以使用INFORMATION_SCHEMA表来生成要执行的SQL。

使用以下脚本生成SQL:

SELECT CONCAT('UPDATE ', TABLE_NAME ,' SET ',COLUMN_NAME ,'=\"\" WHERE ', COLUMN_NAME  ,'=\" \";') AS  SQLCOMMAND
FROM INFORMATION_SCHEMA.COLUMNS
WHERE data_type IN ('VARCHAR' ,'CHAR')
AND TABLE_SCHEMA='your_database_name'

这将打印出VARCHARCHAR的所有列的更新语句,并将这些列值更新为“”。

答案 1 :(得分:0)

没有让INFORMATION_SCHEMA工作,所以我尝试了这个:

$rs = $db->query('SELECT * FROM mytablename LIMIT 0');

for ($i = 0; $i < $rs->columnCount(); $i++) {
    $col = $rs->getColumnMeta($i);
    $columns[] = $col['name'];
    $rs2 = $db->query('UPDATE mytablename SET '.$col['name'].'="" WHERE '.$col['name'].'=" "');
}

效果很好。