2015-08-26 3 views
2

Я хочу, чтобы обновить все значения в моей таблице независимо от того столбца, где значение соответствует определенному значениюMySQL UPDATE с из указания имен столбцов

например:

Таблица column_a column_b column_c

abc    xhk    None 
None    thk    hi 
xyz    None   None 
None    abcdef   None 

Я хочу, чтобы изменить все 'нет' к 'N/A'

Желаемая таблицу результатов column_a column_b column_c

abc    xhk    N/A 
N/A    thk    hi 
xyz    N/A    N/A 
N/A    abcdef   N/A 

Я могу сделать это с помощью запросов

update table_name set column_a = 'N/A' where column_a = 'None' 
update table_name set column_b = 'N/A' where column_b = 'None' 
update table_name set column_c = 'N/A' where column_c = 'None' 

Есть ли лучший способ сделать это, желательно без указания имени столбца?

ответ

1

Свое предложение. Я подумал, что это может быть так. Если он работает. Дай мне знать.

$SqlQuery = "SHOW COLUMNS FROM TableName"; 
    $Result= mysql_query($SqlQuery); 
    while($Row = mysql_fetch_array($Result)) 
    { 
     $ColumnName=$Row['Field']; 
     mysql_query("UPDATE TableName SET $ColumnName='N/A' WHERE $ColumnName='None'"); 
    } 
+0

Мне нравится идея, я бы, вероятно, построил инструкцию SQL в цикле while, поэтому вы попадаете только в базу данных один раз, но для каждого столбца. –

1

Вам необходимо использовать динамический SQL

set @sql:=''; 
select @sql:=concat(@sql,' case when ',column_name,'=''none'' 
    then ''N/A'' else ',column_name,' end,'); 
set @sql:=left(@sql,length(@sql)-1); 
set @sql:=concat('select ',@sql,' from your_table'); 

prepare stmt from @sql; 
execute stmt; 
deallocate prepare stmt; 
+0

Я искал метод, который не требует использования имен столбцов, т. Е. Если есть много столбцов, запрос просто растет в размерах правильно? Есть ли более общий способ сделать это? –

+0

См. Отредактированный ответ – Madhivanan

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