帮助运行MySQL查询以更新多站点安装中的所有wp_#_options表

时间:2011-07-27 作者:Mason James

我想通过我的WordPress数据库运行一个查询,更新所有单个站点上的blog\\u公共值。我一直在思考如何让语句查找wp\\U 2\\U选项、wp\\U 3\\U选项等。

我可以单独做这样的事情:

UPDATE wp_10_options
SET option_value = REPLACE(option_value, \'1\', \'0\')
但我一直在思考如何运行一个可以遍历所有表的查询。有什么帮助吗?

提前感谢:)

2 个回复
SO网友:Mason James

获得了部分解决方案,但要求VPS运行,因为共享主机对游标的操作有限制。

无论如何

DROP PROCEDURE IF EXISTS `update_all_options`;
DELIMITER //
CREATE PROCEDURE update_all_options(
IN db varchar(255),
IN theoption varchar(255),
IN set_val VARCHAR(255)
)
BEGIN
DECLARE table_val VARCHAR(255);

-- Declare variables used just for cursor and loop control
DECLARE no_more_rows BOOLEAN;

-- Declare the cursor
DECLARE options_cur CURSOR FOR SELECT table_name FROM information_schema.tables WHERE TABLE_SCHEMA = db AND TABLE_NAME LIKE \'wp_%options\';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;

OPEN options_cur;

the_loop: LOOP

FETCH options_cur
INTO table_val;

IF no_more_rows THEN
CLOSE options_cur;
LEAVE the_loop;
END IF;

SET @qry = CONCAT(\'UPDATE \', table_val, \' SET option_value = "\', set_val, \'" WHERE option_name = "\', theoption, \'"\');
PREPARE sqlstatement FROM @qry;
EXECUTE sqlstatement;
DEALLOCATE PREPARE sqlstatement;

END LOOP the_loop;

END //
DELIMITER ;
您可以在sql查询窗口中运行它来创建过程。然后它会一直留在你需要的地方。要使用它,请执行以下操作:

CALL update_all_options(\'wpglobal\', \'blog_public\', \'1\');
将wpglobal数据库中名为blog\\u public的所有选项更改为1。PHP可能会容易得多,嗯?或者说,我的同事提出了上述观点:)

SO网友:Rarst

从数据库的角度来看,可能有很多方法可以做到这一点。。。但是,如果只需要执行一次并坚持使用WP API:

用它制作一个简单的插件,将您的替换项放入激活例程中,网络激活(只是我不记得您是否还需要访问要触发激活或已修复的站点的仪表板)

  • 结束

    相关推荐

    是否将MySQL数据条目批量转换为自定义发布类型?

    我有一个MySQL表,其中大约有500行条目,每个条目包含:标题、作者、系列和系列号。是否有人知道如何将数据大规模转换为(每篇文章1个条目)自定义文章类型,标题变成文章标题,作者和系列作为单独的自定义层次分类法,系列号作为自定义元?我计划从一个简单的MySQL数据库管理系统更改为一个安装了WP MS的站点。