0

我正在尝试使用单个 SQL SELECT 语句来更新 worpress 数据库中的所有帖子内容。

对于每个单独的帖子,我需要更新在帖子正文中随机定位的特定字符串值。这个值不是唯一的,因此它在内容中出现了多次,但我只需要更新第二次出现。

下面,我有一个单独的帖子的代码,我需要一些帮助来扩展它,以便为数据库中的整个帖子表执行此操作。

SET @pos=2; // this is the occurrence index

SET @str := (SELECT `post_content` FROM `wp_posts` WHERE ID = 1); // this is a specific post identified by the ID

SET @search='1234'; // this is the test string I'm looking for

// 4321 is the replacement value of 1234 search sting above

// post update sql query

UPDATE `wp_posts` SET `post_content` = (SELECT CONCAT(SUBSTRING_INDEX(@str,@search,@pos),'4321',SUBSTRING_INDEX(@str,@search,(@pos-1-(LENGTH(@str)-LENGTH(REPLACE(@str,@search,'')))/LENGTH(@search))))) WHERE ID = 1;

现在,这可以完美地用作对由 ID 标识的单个帖子的查询,但是我不太确定如何将其扩展为应用于 wordpress 数据库中的所有帖子,但使用单个 sql 查询。

任何帮助,将不胜感激。

谢谢你。

4

1 回答 1

0

无需将特定帖子放入@str 并在更新查询中对其进行操作,而是直接对“post_content”进行操作。(@str替换post_contentWHERE ID = 1删除)

UPDATE `wp_posts` SET `post_content` = (SELECT CONCAT(SUBSTRING_INDEX(`post_content`,@search,@pos),'4321',SUBSTRING_INDEX(`post_content`,@search,(@pos-1-(LENGTH(`post_content`)-LENGTH(REPLACE(`post_content`,@search,'')))/LENGTH(@search)))));
于 2013-02-20T17:14:54.653 回答