0

我所有的帖子标题前面都有一个静态词。我的帖子标题中有超过 9000 篇已发布的帖子,其中包含两个不同的静态词。我正在尝试从我的所有帖子中删除这个词。

本质上,我正在寻找一种方法来删除那个不变的词。我尝试通过 wordpress 使用导出并以这种方式编辑帖子标题,但文件为 100mb + 并且根本无法打开。

我查看了 SQL/phpmyadmin,但我不太精通 SQL 查询,也不想弄乱我的数据库。

“常数”始终是标题的第一个词。我该怎么做才能让 mysql 检测第一个空格并删除它之前的所有内容以及包括空格。本质上,删除第一个单词。基本上我有不止一个常数,所以如果我能找到字符串中的第一个空格然后删除它以及它之前的所有内容会更好。我假设我们会使用 sub_string 或其他东西。

这是标题结构

不变的其他东西在这里

因此,如果有一个搜索查询在其中找到“Constant”和一个空格并将其替换为“”nothing,那么我可以将其完全删除。如果它可以是搜索和替换查询,那就太好了,这样我以后可以使用它。

数据库/表/列信息

表被调用:当它的值是并且标题在列中时wp_posts,它需要限制为表的值post_typepostpost_title

任何帮助将不胜感激。

4

2 回答 2

1

MySQL 并不完全符合您的要求——是的,有一个REPLACE()字符串函数,但您不能将其限制为单个替换。因此,您可能会无意中替换其他可能出现在标题字符串中的该常量。

恕我直言,最简单的方法是找到所有以常量开头的标题,然后替换第一个(即在字符串的开头):

UPDATE wp_posts
SET post_title = 
MID( post_title, LENGTH('Constant ')+1 )
WHERE post_title LIKE 'Constant %'
AND post_type = 'post';

您需要,+1因为 MySQL 字符串偏移量从 1 开始,而不是 0。

就个人而言,我总是更喜欢先运行等效的 SELECT ,只是为了确定(MyISAM 很多年没有BEGIN WORK):

SELECT post_title,
MID( post_title, LENGTH('Constant ')+1 ) AS replacedTitle 
FROM wp_posts
WHERE post_title LIKE 'Constant %'
AND post_type = 'post';

或者,如果您确定始终要删除第一个单词(即直到并包括第一个空格),则以下语句应该有效:

UPDATE wp_posts
SET post_title = 
MID( post_title, POSITION( ' ' IN post_title )+1 )
WHERE post_type = 'post';

由于POSITION()如果没有找到空格将返回零,因此该语句在一般情况下将是无操作(即非破坏性)。

于 2013-02-24T01:04:56.893 回答
1

搜索 RegEx是一个很棒的插件,能够搜索和替换 - 使用 grep 或纯文本 - 通过所有帖子和页面内容、帖子标题、帖子元等。不搜索自定义帖子类型。

在进行任何更改之前备份您的数据库,无论是使用此插件还是在数据库中直接查询。

文档:http ://urbangiraffe.com/plugins/search-regex/

于 2013-02-24T06:07:23.190 回答