结果集中的mysql搜索和替换(更改wordpress表前缀后)

bwleehnv  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(419)

wordpress正在保存大量关于用户和设置的信息,包括表名。如果您必须更改wordpress表的前缀(例如,如果两个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替换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\u oldprefix\u foo变为frank\u newprefix\u foo

uurity8g

uurity8g1#

按照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%' ;

相关问题