如何在数据库中搜索和替换多个值?例如,如果我想在一个表中搜索所有提到单词yellow、blue和green的地方,并将它们全部替换为"black",那么我如何同时做到这一点,而不必对每个单词都进行查询呢?我有一个表wp_posts,希望它搜索并替换post_content中的所有内容。命令到底是什么样的?谢谢大家!
wp_posts
post_content
monwx1rj1#
对于single table更新
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
multiple tables
dump
find/replace
unwanted text
wanted text
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演示
mlnl4t2r3#
值得注意的是,你所做的任何搜索和替换,都不能在WordPress(或许多其他PHP CMS)的纯SQL UPDATE语句中完成,因为它们有一个讨厌的习惯,即使用序列化的PHP字符串存储内容。JSON可以很容易地编辑,而不必考虑长度。因此,你最好使用搜索替换插件或脚本。有很多工具可以帮助解决这个问题。你有一个插件解决方案称为更好的搜索替换,或者你可以使用WP CLI搜索替换命令,或搜索替换DB脚本。所有使用相同的算法,都有自己的用例和弱点,你应该知道这些之前,开始什么可以是一个相当破坏性的操作数据库。先做备份!
3条答案
按热度按时间monwx1rj1#
对于
single table
更新从
multiple tables
开始-如果您想从所有表中进行编辑,最好的方法是获取
dump
,然后获取find/replace
并将其上传回来。和/或使用数组,以选择指定的颜色应为
unwanted text
,黑色应为wanted text
qxsslcnc2#
你可以做这样的事
下面是SQLFiddle演示
mlnl4t2r3#
值得注意的是,你所做的任何搜索和替换,都不能在WordPress(或许多其他PHP CMS)的纯SQL UPDATE语句中完成,因为它们有一个讨厌的习惯,即使用序列化的PHP字符串存储内容。JSON可以很容易地编辑,而不必考虑长度。
因此,你最好使用搜索替换插件或脚本。有很多工具可以帮助解决这个问题。
你有一个插件解决方案称为更好的搜索替换,或者你可以使用WP CLI搜索替换命令,或搜索替换DB脚本。所有使用相同的算法,都有自己的用例和弱点,你应该知道这些之前,开始什么可以是一个相当破坏性的操作数据库。先做备份!