Хорошо, возможно это действительно просто, но я не могу понять это самостоятельно:
Сначала у меня есть CSV-файл.
Я импортирую это с
LOAD DATA LOCAL INFILE
… в таблицу MySQL с 20 столбцами и более 10000 строк.
Затем в некоторых строках и столбцах есть поля с содержимым = «», которые я хотел заменить на «».
Я не знаю, в каких столбцах будет «», поэтому я хочу перебрать всю таблицу.
Вот я и подумал примерно так:
REPLACE INTO products (XXX) VALUE ("") WHERE XXX = " "
… где XXX все имена столбцов.
Может ли кто-нибудь дать мне подсказку на это?
Может быть, я должен сделать это в php?
Благодарю.
UPDATE table SET column = "" WHERE column=" "
, Но я хочу это без написания 20 запросов для каждого столбца.
Как упомянул Михай, вы можете использовать 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
и обновите значения этих столбцов до «».
Не удалось заставить 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'].'=" "');
}
Это сработало хорошо.