2014-09-15 2 views
0

Хорошо, может быть, это действительно просто, но я не могу понять это сам:MySQL - заменить пространство всей таблицы во всех строках и столбцах

Во-первых у меня есть файл CSV. Я импортирую это с LOAD DATA LOCAL INFILE ... в таблицу mysql с 20 столбцами и более 10000 строк.

Тогда в некоторых строках и столбцах есть поля с содержимым = "", которые я хотел бы заменить символом "". Я не знаю, в каких столбцах будет «", поэтому я хочу перебирать всю таблицу.

Так что я подумал над чем-то вроде этого: REPLACE INTO products (XXX) VALUE ("") WHERE XXX = " " ... где XXX - все имена колонок.

Может ли кто-нибудь дать мне намек на это? Может быть, я должен сделать это в php? Спасибо.

[Изменить] Или, может быть, есть способ сделать это при импорте самого csv-файла?

[Изменить] Я просто подумал о том, чтобы сделать UPDATE table SET column = "" WHERE column=" ". Но я хочу это, не написав 20 запросов для каждого отдельного столбца.

+0

вы обновляете продукты set col = "" где col = "" 'для обновления столбцов – czifro

+0

Используйте INFORMATION_SCHEMA для создания необходимых вам операторов. – Mihai

+0

@czifro: одновременно такой же мысль. Благодарю. – dawson0707

ответ

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 и обновлять эти значения столбцов «».

+0

Я сделал mysql_query ($ sql) ', и он сказал, что это было успешно. Но ничего не изменилось. Что случилось? Мой $ sql был: '$ sql =" SELECT CONCAT ('UPDATE mytablename SET', COLUMN_NAME, '= \ "\" WHERE', COLUMN_NAME, '= \ "\";') AS SQLCOMMAND FROM INFORMATION_SCHEMA.COLUMNS ГДЕ data_type IN ('VARCHAR', 'CHAR') И TABLE_SCHEMA = 'mydbname' ";' – dawson0707

0

Didn't получить 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'].'=" "'); 
} 

Он работал хорошо.

Смежные вопросы