MySQL 在结果集中搜索和替换(更改 WordPress table 前缀后)
MySQL search and replace in result set (after changing WordPress table prefixes)
WordPress 正在保存大量有关用户和设置的信息,包括 table 名称。如果您必须更改 WordPress table 前缀(例如,如果两个 WordPress 安装使用相同的数据库,这可能是必要的),这将非常烦人。
你必须更新 wp_options
table 中的很多键,它们是这样收集的:
SELECT * FROM `myprefix_options` WHERE `option_name` LIKE '%wp_%'
您还必须更新 wp_usermeta
table 中的许多键,这些键是这样收集的:
SELECT * FROM `myprefix_usermeta` WHERE `meta_key` LIKE '%wp_%'
因此此处显示的查询将提供给定的结果。现在我正在搜索以下高级查询:
对于(select 查询的结果集)中的每个结果,将 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 的输入,我们假设如下。
- 更新查询应该区分大小写(不要替换出现的大写字母)
- 替换元键中的所有匹配项,这意味着 frank_oldprefix_foo 变为 frank_newprefix_foo
按照 solarflare 的建议使用 Mysql 替换。它区分大小写(我只是仔细检查了我的测试多站点)。所以 sql 将是:
用户元:
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%' ;
WordPress 正在保存大量有关用户和设置的信息,包括 table 名称。如果您必须更改 WordPress table 前缀(例如,如果两个 WordPress 安装使用相同的数据库,这可能是必要的),这将非常烦人。
你必须更新 wp_options
table 中的很多键,它们是这样收集的:
SELECT * FROM `myprefix_options` WHERE `option_name` LIKE '%wp_%'
您还必须更新 wp_usermeta
table 中的许多键,这些键是这样收集的:
SELECT * FROM `myprefix_usermeta` WHERE `meta_key` LIKE '%wp_%'
因此此处显示的查询将提供给定的结果。现在我正在搜索以下高级查询:
对于(select 查询的结果集)中的每个结果,将 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 的输入,我们假设如下。
- 更新查询应该区分大小写(不要替换出现的大写字母)
- 替换元键中的所有匹配项,这意味着 frank_oldprefix_foo 变为 frank_newprefix_foo
按照 solarflare 的建议使用 Mysql 替换。它区分大小写(我只是仔细检查了我的测试多站点)。所以 sql 将是:
用户元:
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%' ;