好吧,也许这很简单,但我不能自己解决这个问题:
首先我有一个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个查询。
答案 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'
这将打印出VARCHAR
或CHAR
的所有列的更新语句,并将这些列值更新为“”。
答案 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'].'=" "');
}
效果很好。