Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, уважаемые!
очень нужна ваша помощь, есть БД wordpress'a , там почти во всех таблицах часто повторяется одно и тоже слово (значение) - site111.ru , и нужно сформировать запрос на изменение этого значения во всей БД, - на site111.org (переезжаем)
возможно ли такое сделать одним запросом, и каков запрос, подскажите пожалуйста.
Заранее спасибо!
Неактивен
сначала находишь названия всех таблиц в БД запросом к information_schema
> select table_name from information_schema.tables where table_schema='название схемы'
после этого находишь все поля каждой таблицы
> select table_name, column_name from information_schema.columns
where table_name in (select table_name from information_schema.tables where table_schema='название схемы') and table_schema='название схемы'
Получая имя таблицы и поле, делаешь динамический запрос через PREPARE и EXECUTE на сравнение с указанным значением. В один запрос не получится, получится в одну хранимую процедуру. seealso http://habrahabr.ru/blogs/mysql/52983/
Неактивен
огромное спасибо!)
Неактивен
delimiter $$
drop procedure if exists check_all$$
create procedure check_all(in schemaname varchar(255))
begin
DECLARE done INT DEFAULT 0;
declare tabname varchar(255);
declare colname varchar(255);
declare template varchar(600);
declare c1 cursor for select table_name, column_name
from information_schema.columns
where table_name in (select table_name
from information_schema.tables
where table_schema=schemaname) and data_type='char' and table_schema=schemaname;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
open c1;
repeat
fetch c1 into tabname, colname;
#prepare statement
set @template := concat('update ',tabname,' set ',colname,'=''lol!!!'' where ',colname,'=''1003LL'' ');
prepare template from @template;
execute template;
deallocate prepare template;
until done end repeat;
close c1;
end$$
Неактивен
Здесь важное дополнение - тип колонки char. Тестировал на себе - работает;
Неактивен