【发布时间】:2018-12-02 04:11:59
【问题描述】:
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 的输入,我们假设如下。
- 更新查询应该区分大小写(不要替换出现的大写字母)
- 替换元键中的所有匹配项,这意味着 frank_oldprefix_foo 变为 frank_newprefix_foo
【问题讨论】:
-
它是前缀(如您的示例中)(因此旧字符串始终以该子字符串开始)还是出现在字符串中的任何位置(如
%wp_%搜索)和/或它是第一次出现,但在你的字符串中的任何地方?或者举个例子:blackbam_WP_wp_blackbam和WP_blackbam会被替换成什么? (特意使用大写) -
好的,我应该澄清一下:让我们假设我们的表不使用大写名称,因此区分大小写。我们还假设前缀可以出现在名称字符串中的任何位置并使用它们。我会更新问题。
-
好吧,在这种情况下,看看例如MySql - Way to update portion of a string?、MySQL string replace 和/或replace 的 MySQL 文档(除非我错过了关于您的情况的一些特殊情况)。
-
你真的必须住在一个
DATABASE吗?可以跨数据库引用表。
标签: mysql sql wordpress replace wildcard