所以,我尝试运行一个sql操作:
INSERT INTO wp4t_postmeta (post_id, meta_key, meta_value)
SELECT a.post_id, '_attached_image', b.ID
FROM wp4t_postmeta a
INNER JOIN wp4t_posts b ON a.meta_value WHERE a.meta_key="_content_field_42"
= b.guid
本质上,我需要用post id、meta key(附加的\图像)和meta \ u值更新wp4t \ u postteta表。
当wp4t\u postemta中meta\u key\u content\u字段\u 42的meta\u值与wp4t\u posts的guid匹配时,我需要meta\u值来自wp4t\u posts id。
一开始,每次尝试运行tmp dir时,它的大小都会用尽,所以我添加了一个限制来测试它:
INSERT INTO wp4t_postmeta (post_id, meta_key, meta_value)
SELECT a.post_id, '_attached_image', b.ID
FROM wp4t_postmeta a
INNER JOIN wp4t_posts b ON a.meta_value WHERE a.meta_key="_content_field_42"
= b.guid LIMIT 10;
现在我得到错误“#1062-键'primary'的重复条目'0'”
我知道这是wp4t\u postemta的meta\u id自动递增表,但是我想如果不包括它,它会自动递增吗?
我做错什么了?
另外,有没有更好的方法来编写这个查询?
更新。。。。正在取得进展:
INSERT INTO wp4t_postmeta (post_id, meta_key, meta_value)
SELECT postmeta.post_id, '_attached_image', posts.ID
FROM wp4t_postmeta AS postmeta
INNER JOIN wp4t_posts AS posts ON postmeta.meta_value = posts.guid
WHERE postmeta.meta_key="_content_field_42"
AND posts.post_type="attachment"
编辑。。。。仍然活着:
INSERT INTO wp4t_postmeta (post_id, meta_key, meta_value)
SELECT postmeta.post_id, '_attached_image', posts.ID
FROM wp4t_postmeta AS postmeta
INNER JOIN wp4t_posts AS posts ON postmeta.meta_value = posts.guid
AND postmeta.meta_key = '_content_field_42'
WHERE posts.post_type="attachment"
2条答案
按热度按时间92dk7w1h1#
ON a.meta_value
是“真的”吗a.meta_value
为非空。那可能不是你想要的。也许是这样的:如果这还不够,我们来看看这两种方法的相关行
a
以及b
.进一步解释:当
ON
子句总是“true”,您正在构建一个临时表,它是所有a
以及b
. 如果每个表都有10k行,那就是一个有100m行的临时表。这可能会使tmp目录中的空间溢出。但是,如果你过了这一关,你可能会有10万排同样的人
a.post_id
但即使这样也不能解释一切。如果我没弄错的话,post_id
是一个AUTO_INCREMENT
,通常不包含0
. 唯一可能的办法0
是显式插入0
.但这就是你要做的。
好吧,我无法推断
0
但这很可能是另一个问题的线索。cidc1ykv2#
我要花点时间来回答这个问题。
我的问题是正确的。
我只是没有打开autoincrement,因为有一个无效的id 0,我删除了它。
编辑:最终正确查询
在一个vps服务器上工作,在wp\ U postmeta中有超过1毫米的表-花了一些时间,但它运行了。