如何通过mySQL批量更新帖子标题wordpress

时间:2013-02-24 00:52:02

标签: mysql wordpress phpmyadmin

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

基本上,我正在寻找一种方法来删除那个常数字。我尝试通过wordpress导出导出并编辑帖子标题,但文件是100mb +并且根本无法打开。

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

  

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

这是标题结构

  

这里不断的其他东西

所以,如果有一个搜索查询,它找到“常量”和一个空格并用“”替换它,那么我就可以完全删除它。它可能是一个搜索和替换查询,所以我可以在以后使用它。

有关数据库/表/列的信息

该表名为:wp_posts,当值为post_type且标题位于post时,需要将其限制为表post_title的值柱

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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开始,而不是从零开始。

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

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 :(得分:0)

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

在使用此插件或数据库中的直接查询进行任何更改之前备份数据库。

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