MySQL — заменить пространство во всей таблице во всех строках и столбцах

Хорошо, возможно это действительно просто, но я не могу понять это самостоятельно:

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

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

Вот я и подумал примерно так:
REPLACE INTO products (XXX) VALUE ("") WHERE XXX = " "
… где XXX все имена столбцов.

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

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

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

0

Решение

Как упомянул Михай, вы можете использовать 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

Другие решения

Не удалось заставить 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'].'=" "');
}

Это сработало хорошо.

0

По вопросам рекламы [email protected]