2010-01-23 61 views
0

我试图更新我的wordpress mu数据库中的表。我想更新所有wp_options表。这些表被命名为这样的:mysql通配符(忽略搜索中的一个/两个字符)

  • wp_1_options
  • wp_2_options
  • ...等等。

我如何使用wp_any-character-here_options影响所有表格?我试图查询:

UPDATE wp_%_options 
    SET option_value = replace(option_value, 'http://www.old-domain.com', 'http://www.new-domain.com') 
WHERE option_name = 'home' OR option_name = 'siteurl'; 

...但MySQL的抱怨我在语法有错误......

回答

0

你不能通配符UPDATE语句 - 你必须写为每个表的UPDATE声明。

未经测试:

CREATE PROCEDURE cleanup() 
BEGIN 

    DECLARE i INT DEFAULT 1; 

    PREPARE stmt FROM "UPDATE ? 
         SET option_value = REPLACE(option_value, 'http://www.old-domain.com', 'http://www.new-domain.com') 
         WHERE option_name IN ('home', 'siteurl')" 

    WHILE i <= 10 
    EXECUTE stmt USING CONCAT('wp_', i, '_options'); 

    SET i = i + 1; 
    END WHILE; 

    DEALLOCATE PREPARE stmt; 

END; 
+0

哦......真的吗?有没有其他的方式来实现这一点,或者我真的需要改变这个数字10倍? – Stan 2010-01-23 04:04:55

+0

@Stan:您可以使用MySQL的Prepared Statements来动态构建查询。 MySQL支持更新多个表,但我不知道你的情况是否可行。 – 2010-01-23 04:08:44

+0

@Stan你应该从未创建过这样的表格。 – Sampson 2010-01-23 04:10:41