MySQL查询可变数据

时间:2015-05-22 00:43:44

标签: mysql wordpress shortcode

我已经使用通配符搜索了各种MySQL查询,并替换了调用,但我找不到我要查找的内容。

由于Post Plugin中的Amazon产品升级,我需要更新整个网站的短代码。此字符串替换调用必须处理变量字符串:

在妈妈博客的WordPress数据库中:

我必须替换

[AMAZONPRODUCT=B0084IG8TM]

[amazon-element asin="B0084IG8TM" fields="title,sm-image,new-price,button"]

因此,调用必须标识基本字符串,然后标识10个字符的产品代码WHICH IS VARIABLE,并在方括号内包围该10个字符串的内容。

连连呢? 非常感谢你。

1 个答案:

答案 0 :(得分:1)

您可以像这样获取子字符串(前提是它总是10个字符后跟]):

select substring(right('[AMAZONPRODUCT=B0084IG8TM]', 11), 1, 10)

首先,它使用right()拉出最后11个字符,然后使用substring()

获取前10个字符

然后,您可以将输出推送到concat()调用以获取必要的字符串:

select concat('[amazon-element asin="', substring(right('[AMAZONPRODUCT=B0084IG8TM]', 11), 1, 10), '" fields="title,sm-image,new-price,button"]')

然后,您可以构建更新查询,如下所示:

update <your_table>
  set your_field = concat('[amazon-element asin="', substring(right('[AMAZONPRODUCT=B0084IG8TM]', 11), 1, 10), '" fields="title,sm-image,new-price,button"]')
  where your_field like '[AMAZONPRODUCT=%'

好的,所以它可以在字符串中的任何地方,只要它只是字符串中的ONCE,它仍然相对简单。如果它可以在字符串中不止一次,忘记使用查询执行它,并使用php脚本或其他东西。 (或多次运行更新,直到所有事件都发生更改)

update wp_posts
  set post_content = concat(left(post_content, locate('[AMAZONPRODUCT=', post_content) -1), '[amazon-element asin="',substring(post_content, locate('[AMAZONPRODUCT=', post_content) + 15, 10), '" fields="title,sm-image,new-price,button"]', substring(post_content, locate('[AMAZONPRODUCT=', post_content) + 26)) 
  where post_content like '%[AMAZONPRODUCT=%'

demo here