2013-02-24 62 views
0

我所有的帖子标题都有一个静态词。我在帖子标题中发布了超过9000个发布帖子,其中包含两个不同的静态词汇我试图从我所有的帖子中删除这个词。如何通过mySQL批量更新帖子标题wordpress

从本质上讲,我正在寻找一种方式来删除常量字。我尝试通过wordpress使用导出并以这种方式编辑帖子标题,但文件为100MB +,并且根本无法打开。

我看向SQL/phpMyAdmin的,但我不是非常好,SQL查询精通,不想搞砸了我的数据库。

“恒定”始终是标题的第一个字。我能做些什么 而不是让mysql检测到第一个空间并删除之前的所有内容以及包含空间。从本质上讲,删除第一个词 。基本上我有一个以上的常量,所以如果我只能找到字符串中的第一个空格,然后将其删除并且之前的所有内容都更好,那么它应该更好一些。我假设我们会使用sub_string 什么的。

这是职称结构

恒等这里的东西

所以如果它发现“恒”的搜索查询和空间,并以“”没有什么替代它这样我就可以完全删除它。如果它可能是一个搜索和替换查询,那就太好了,所以我可以在以后使用它。

在数据库/表/列信息

的表称为:wp_posts,并且需要时,它的价值是post被限制到表post_type的价值和标题在post_title

任何帮助将不胜感激。

回答

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开始,而不是零。

就个人而言,我总是喜欢跑相当于首先选择,只是为了某些(太多年的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()将返回零,如果没有空间被发现,这句话将成为在无操作(即非破坏性的)一般情况。

+1

我假设我将与WordPress的等效替代“上岗”和“称号”? – Maaz 2013-02-24 01:33:25

+1

我怎么会去把它限制在那里post_type等于 “后” SELECT POST_TITLE, MID(POST_TITLE,长度( '恒')+1)AS replacedTitle FROM wp_posts WHERE POST_TITLE LIKE '恒%';' – Maaz 2013-02-24 01:37:59

+1

我用数据库信息更新了我的问题。 – Maaz 2013-02-24 01:48:06

0

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

备份做任何改变,无论是与这个插件或直接查询数据库之前,你的数据库。

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

+0

这可能是一个很好的解决方案,但安装插件,并寻找在“文章标题”简单的一句话后场没有结果。测试过的其他一些词也没有任何成功。 :( – Maaz 2013-02-24 09:00:24

+0

看看你的标记和搜索单词与phpMyAdmin在数据库中找出字(S)真的是;在标题或内容。 – markratledge 2013-02-24 15:21:43