MySQL数据库中的搜索替换查询

piok6c0g  于 2023-02-07  发布在  Mysql
关注(0)|答案(3)|浏览(136)

如何在数据库中搜索和替换多个值?
例如,如果我想在一个表中搜索所有提到单词yellow、blue和green的地方,并将它们全部替换为"black",那么我如何同时做到这一点,而不必对每个单词都进行查询呢?
我有一个表wp_posts,希望它搜索并替换post_content中的所有内容。
命令到底是什么样的?
谢谢大家!

monwx1rj

monwx1rj1#

对于single table更新

UPDATE `table_name`
 SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')

multiple tables开始-
如果您想从所有表中进行编辑,最好的方法是获取dump,然后获取find/replace并将其上传回来。
和/或使用数组,以选择指定的颜色应为unwanted text,黑色应为wanted text

qxsslcnc

qxsslcnc2#

你可以做这样的事

UPDATE wp_posts
   SET post_content = REPLACE(
                        REPLACE(
                          REPLACE(post_content, 
                          'yellow', 'black'), 
                        'blue', 'black'), 
                      'green', 'black')
 WHERE post_content LIKE '%yellow%'
    OR post_content LIKE '%blue%'
    OR post_content LIKE '%green%'

下面是SQLFiddle演示

mlnl4t2r

mlnl4t2r3#

值得注意的是,你所做的任何搜索和替换,都不能在WordPress(或许多其他PHP CMS)的纯SQL UPDATE语句中完成,因为它们有一个讨厌的习惯,即使用序列化的PHP字符串存储内容。JSON可以很容易地编辑,而不必考虑长度。
因此,你最好使用搜索替换插件或脚本。有很多工具可以帮助解决这个问题。
你有一个插件解决方案称为更好的搜索替换,或者你可以使用WP CLI搜索替换命令,或搜索替换DB脚本。所有使用相同的算法,都有自己的用例和弱点,你应该知道这些之前,开始什么可以是一个相当破坏性的操作数据库。先做备份!

相关问题