Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结果集中的MySQL搜索和替换(更改WordPress表前缀后)_Mysql_Sql_Wordpress_Replace_Wildcard - Fatal编程技术网

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

结果集中的MySQL搜索和替换(更改WordPress表前缀后),mysql,sql,wordpress,replace,wildcard,Mysql,Sql,Wordpress,Replace,Wildcard,WordPress正在保存大量关于用户和设置的信息,包括表名。如果您必须更改WordPress表前缀(例如,如果两个WordPress安装使用同一个数据库,则可能需要更改前缀),这是非常烦人的 您必须更新wp\u options表中的许多键,这些键的收集方式如下: SELECT * FROM `myprefix_options` WHERE `option_name` LIKE '%wp_%' SELECT * FROM `myprefix_usermeta` WHERE `meta_key`

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

您必须更新
wp\u options
表中的许多键,这些键的收集方式如下:

SELECT * FROM `myprefix_options` WHERE `option_name` LIKE '%wp_%'
SELECT * FROM `myprefix_usermeta` WHERE `meta_key` LIKE '%wp_%'
您还必须更新
wp\u usermeta
表中的许多键,这些键的收集方式如下:

SELECT * FROM `myprefix_options` WHERE `option_name` LIKE '%wp_%'
SELECT * FROM `myprefix_usermeta` WHERE `meta_key` LIKE '%wp_%'
因此,这里提供的查询将提供给定的结果。现在,我正在搜索以下高级查询:

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

例如:

[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

  • 按照solarflare的建议使用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%' ;
    

    它是前缀(如您的示例中所示)(因此旧字符串总是以该子字符串开头)还是出现在字符串中的任何位置(如
    %wp\uwp%
    将搜索的)和/或它是第一次出现,但出现在字符串中的任何位置?或者用一些例子来说:
    blackam\u WP\u WP\u blackam
    WP\u blackam
    将被什么替换?(大写是有意使用的)好的,我应该澄清一下:假设我们的表不使用大写名称,因此区分大小写。我们还假设前缀可以出现在名称字符串中的任何位置,并使用所有前缀。我会更新这个问题。好吧,在这种情况下,请看一看例如和/或的MySQL文档(除非我错过了关于您情况的一些特殊信息)。您真的必须生活在一个
    数据库中吗?跨数据库引用表是可能的。事实就是这样。我不知道,谢谢。