我必须更新几张表以清理wordpress多站点安装中堆积的cron作业。
该网络有500多个站点,并且wordpress中的表已编号,因此您将拥有:
wp_options
wp_1_options // for blog id 1
wp_2_options
wp_3_options
// and so on...
我想知道是否可以使用任何通配符替换该博客ID号,以便它一次将所有表从1改为x。我尝试了wp_*_options
,没有任何积极的结果。 (我不习惯直接与数据库一起工作。)
我将要执行的查询如下:
UPDATE wp_options SET option_value = '' WHERE option_name = 'cron';
谢谢。
答案 0 :(得分:2)
基本上,您正在寻找动态SQL:这意味着使用SQL来生成和执行SQL。
在MySQL中,标准方法要求创建一个过程,该过程使用游标遍历表名并生成查询,然后使用prepared statements来执行它们。这可能很棘手。
对于一次操作,我将选择一个中间选项:使用SQL查询生成SQL语句列表。我们可以查询INFORMATION_SCHEMA.TABLES列出要更新的表。
SELECT CONCAT(
'UPDATE ', table_name,
' SET option_value = NULL',
' WHERE option_name = ''cron'';'
) as sql_query
FROM information_schema.tables
WHERE table_name LIKE 'wp_%_options'
然后,剩下要做的就是手动将查询结果复制到首选的MySQL客户端,然后将整个过程作为脚本执行。
NB1:在生产数据库中仔细检查结果并测试查询!
NB2:this SO question的公认答案详尽地解释了两种方法的逻辑,尤其是存储过程解决方案。