我正在尝试更新WordPress的头像。我有一张桌子wp_commentmeta
,上面有一些破损的meta_value
。
我需要根据wp_comment
表的comment_author_email
重新计算值。
此查询为我提供了一个表,其中包含注释ID和新的URL
SELECT
comment_id,
CONCAT("https://www.gravatar.com/avatar/", MD5(comment_author_email)) AS url
FROM `wp_comments`
WHERE comment_id IN
(SELECT
comment_id FROM `wp_commentmeta`
WHERE `meta_key` LIKE 'avatar'
AND `meta_value` LIKE 'invalid')
| comment_id | url |
|------------|---------------------------------------|
| 1234 | https://www.gravatar.com/avatar/ff... |
| 5678 | https://www.gravatar.com/avatar/ab... |
| .... | ... |
但是如何基于此更新wp_commentmeta
?
我思考我想遍历结果并运行:
UPDATE `wp_commentmeta`
SET `meta_value` = url
WHERE `comment_id` = comment_id
AND `meta_key` LIKE 'avatar'
AND `meta_value` LIKE 'invalid'
但是如何在单个查询中做到这一点?这是我可以使用JOIN
的地方吗?
答案 0 :(得分:0)
这是一个示例,可以使您朝正确的方向前进。我尚未对其进行测试,因此建议您启动事务,然后在提交前检查它是否做对了。
START TRANSACTION;
UPDATE wp_commentmeta AS m
JOIN wp_comments AS c USING (comment_id)
SET m.meta_value = CONCAT("https://www.gravatar.com/avatar/", MD5(c.comment_author_email))
WHERE m.meta_key = 'avatar' AND m.meta_value = 'invalid';
...run some SELECT to double-check that it did what you want...
COMMIT;