简单地说,我尝试在 PhpMyAdmin 中执行此操作:
update wp_postmeta.meta_value = wp_posts.id where
wp_posts.post_name=articles.image
AND wp_posts.post_type=attachment
AND wp_postmeta.meta_key=_thumbnail_id
通过这个 MySQL 查询:
update wp_postmeta m
join articles a on (m.post_id = a.id)
join wp_posts p on (m.post_id = p.ID)
set m.meta_value = p.ID
where p.post_name=a.image
AND a.image != NULL
AND p.post_type='attachment'
AND m.meta_key='_thumbnail_id'
可以工作,但有 0 行受到影响! 有人可以帮忙吗?
最佳答案
将子查询与 Andomar 的答案结合使用。将联接与更新和删除语句一起使用并不好。
应该是这样的
UPDATE wp_postmeta m SET m.meta_value = (SELECT p.ID FROM wp_posts p, articles a
WHERE m.post_id=p.ID AND m.post_id = a.id AND a.image IS NOT NULL
AND p.post_type='attachment' AND p.post_name=a.image)
WHERE m.meta_key='_thumbnail_id'
首先备份!我没有对此进行测试。
如果不起作用,请尝试执行选择查询(如果可以选择它们)。如果没有选择(也可能不会),请检查与您的设计相对应的查询结构。
SELECT m.meta_value, (SELECT p.ID FROM wp_posts p, articles a
WHERE m.post_id=p.ID AND m.post_id = a.id AND a.image IS NOT NULL
AND p.post_type='attachment' AND p.post_name=a.image) AS pID
FROM wp_postmeta m
WHERE m.meta_key='_thumbnail_id'
也尝试一下你的第一个查询
SELECT m.meta_value, p.ID AS pID FROM wp_postmeta m
INNER JOIN articles a on (m.post_id = a.id)
INNER JOIN wp_posts p on (m.post_id = p.ID)
WHERE p.post_name=a.image
AND a.image IS NOT NULL
AND p.post_type='attachment'
AND m.meta_key='_thumbnail_id'
尝试使用/修改选择查询以找出问题。
关于MySQL 查询 0 行受影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061977/