MySQL 可变数据查询

MySQL query with variable data

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

由于 Post 插件中的亚马逊产品升级,我需要更新整个站点的短代码。此字符串替换调用必须处理可变字符串:

妈妈博客的 WordPress 数据库内:

我必须更换

[AMAZONPRODUCT=B0084IG8TM]

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

因此调用必须识别基本字符串,然后识别可变的 10 个字符的产品代码,并将内容围绕在方括号内的 10 个字符的字符串周围。

建议? 非常感谢。

您可以像这样获取您的子字符串(前提是它总是 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=%'

好吧,那么在字符串的任何地方都可以,只要在字符串中只有一次,还是比较简单的。如果它可以多次出现在字符串中,请忘记使用查询来完成它并使用 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