【问题标题】:MySQL search and replace in result set (after changing WordPress table prefixes)MySQL 在结果集中搜索和替换(更改 WordPress 表前缀后)
【发布时间】: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 的输入,我们假设如下。

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

【问题讨论】:

  • 它是前缀(如您的示例中)(因此旧字符串始终以该子字符串开始)还是出现在字符串中的任何位置(如%wp_%搜索)和/或它是第一次出现,但在你的字符串中的任何地方?或者举个例子:blackbam_WP_wp_blackbamWP_blackbam 会被替换成什么? (特意使用大写)
  • 好的,我应该澄清一下:让我们假设我们的表不使用大写名称,因此区分大小写。我们还假设前缀可以出现在名称字符串中的任何位置并使用它们。我会更新问题。
  • 好吧,在这种情况下,看看例如MySql - Way to update portion of a string?MySQL string replace 和/或replace 的 MySQL 文档(除非我错过了关于您的情况的一些特殊情况)。
  • 你真的必须住在一个DATABASE吗?可以跨数据库引用表。

标签: mysql sql wordpress replace wildcard


【解决方案1】:

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

【讨论】:

  • 真的就这么简单。我不知道mysql替换,谢谢。
猜你喜欢
  • 2019-03-11
  • 2015-11-13
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 2019-05-30
  • 2014-11-09
  • 2019-04-26
相关资源
最近更新 更多