MySQL搜索并替换结果集(更改WordPress表前缀后)

时间:2018-06-22 16:23:03

标签: mysql sql wordpress replace wildcard

WordPress正在保存许多有关用户和设置的信息,包括表名。如果必须更改WordPress表前缀(例如,如果两个WordPress安装使用相同的数据库,则可能有必要),这非常烦人。

您必须更新wp_options表中的许多键,这些键是这样收集的:

SELECT * FROM `myprefix_options` WHERE `option_name` LIKE '%wp_%'

您还必须更新wp_usermeta表中的许多键,这些键是这样收集的:

SELECT * FROM `myprefix_usermeta` WHERE `meta_key` LIKE '%wp_%'

因此,此处显示的查询将提供给定的结果。现在,我正在搜索以下高级查询:

对于(选择查询结果集)中的每个结果,请使用新的前缀元关键字替换meta_key的值。

示例:

[umeta_id][user_id][meta_key][meta_value]
1|1|oldprefix_foo|whatever 
2|2|oldprefix_bar|abc

应成为:

[umeta_id][user_id][meta_key][meta_value]
1|1|newprefix_foo|whatever
2|2|newprefix_bar|abc

如何才能(单个)实现MySQL查询?

编辑: 根据@Solarflare的输入,我们假设以下内容。

  1. 更新查询应区分大小写(不要替换大写字母)
  2. 替换元键中所有出现的内容,这意味着frank_oldprefix_foo变为frank_newprefix_foo

1 个答案:

答案 0 :(得分:1)

根据建议使用Mysql替换。它区分大小写(我只是在测试多站点上仔细检查了)。因此,SQL将是:

Usermeta:

UPDATE newprefix_usermeta SET meta_key=REPLACE(meta_key,'oldprefix','newprefix') WHERE meta_key like 'oldprefix%';

选项:

UPDATE newprefix_options SET option_name=REPLACE(option_name,'oldprefix','newprefix') WHERE option_name like 'oldprefix%' ;