0

简单来说,我尝试在 PhpMyAdmin 中这样做:

更新 wp_postmeta.meta_value = wp_posts.id 其中

wp_posts.post_name=articles.image

和 wp_posts.post_type=附件

和 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 行受影响!有人可以帮忙吗?

4

2 回答 2

1

这个说法:

AND a.image != NULL

总是评估为unknown。Andwhere子句过滤掉不是true. 所以 awhere过滤掉unknownfalse。试试这个:

AND a.image is not null

有关更多信息,请参阅此维基百科文章

于 2012-04-08T10:05:08.190 回答
1

使用带有 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'

尝试使用/修改选择查询以找出问题。

于 2012-04-08T10:15:20.940 回答