这不是WordPress的具体内容,但值得注意的是,它是我正在使用的WP数据库...
我需要为posts
的所有条目更新post_title
表值post_type='appearance'
。当前post_title
以所需名称开头,但结尾为"外观[some#]"。所以,来自"外观"最后需要删除,并且需要使用表meta_value
中的postmeta
替换meta_key = _place_id
,其中post_id
和ID
等于posts
102
表。
例如:有一个ID为postmeta
的帖子标题为" John Doe外观102"。在meta_key = _place_id
表中,post_id = 102
和meta_value = 108
,post_title = John Doe 108
。因此,最终结果将是UPDATE posts
SET post_title = TRIM(TRAILING ' appearance %' FROM post_title)
WHERE post_type='appearance'
。
这比我复杂,但我想联接是必要的。我认为两个单独的查询是有意义的。所以,类似于:
UPDATE posts
left join postmeta on
posts.ID= postmeta.post_id
set
posts.post_title = CONCAT(posts.post_title, " ", postmeta.meta_value WHERE postmeta.meta_key = '_place_id')
和
{{1}}
答案 0 :(得分:1)
您可以使用SUBSTRING_INDEX()
UPDATE posts p
LEFT JOIN postmeta pm
ON p.ID = pm.post_id
SET p.post_title = CONCAT(SUBSTRING_INDEX(p.post_title, 'appearance', 1), pm.meta_value)
WHERE pm.meta_key = '_place_id'
在SUBSTRING_INDEX('John Doe appearance 102', 'appearance', 1)
出现之前,appearance
将返回之前的所有内容<{1}},即John Doe
(末尾有空格)。然后,我们可以简单地连接meta_value
。