简单地说,我尝试在PhpMyAdmin中执行此操作:
更新wp_postmeta.meta_value = wp_posts.id
wp_posts.post_name = articles.image
AND wp_posts.post_type =附件
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行受到影响! 有人可以帮忙吗?
答案 0 :(得分:1)
本声明:
AND a.image != NULL
始终评估为unknown
。 where
子句会过滤掉不是true
的行。因此where
过滤了unknown
和false
。试试这个:
AND a.image is not null
有关详细信息,请参阅this wikipedia article。
答案 1 :(得分:1)
将子查询与Andomar的答案一起使用。使用带有update和delete语句的连接并不好。
应该是
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'
尝试使用/修改选择查询以找出问题。