MySQL更新与限制连接
我想知道如何使用另一个表中的值更新一个表,诀窍是我需要设置一个限制,因为我有数千行要更新,而PHPmyadmin无法处理该负载。(我无法直接访问服务器) 我的桌子结构是这样的 wp\u邮差MySQL更新与限制连接,mysql,sql,join,phpmyadmin,Mysql,Sql,Join,Phpmyadmin,我想知道如何使用另一个表中的值更新一个表,诀窍是我需要设置一个限制,因为我有数千行要更新,而PHPmyadmin无法处理该负载。(我无法直接访问服务器) 我的桌子结构是这样的 wp\u邮差 meta\u id, 邮政编码, 元键, 元值 wp\u地图 oldmap,newmap 我需要做的是将wp\u postmeta.meta\u value和wp\u map.oldmap上的两个表连接起来,并使用wp\u map.newmap更新wp\u postmeta.meta\u value 这是我当
meta\u id,
邮政编码,
元键,
元值
wp\u地图
oldmap,newmap
我需要做的是将wp\u postmeta.meta\u value
和wp\u map.oldmap
上的两个表连接起来,并使用wp\u map.newmap
更新wp\u postmeta.meta\u value
这是我当前的查询,但我需要在查询中添加100的限制,因为我要将查询拆分为更小的块,以便PHPMyAdmin可以处理
UPDATE wp_postmeta
INNER JOIN wp_map
ON wp_map.oldmap = wp_postmeta.meta_value
SET wp_postmeta.meta_value = wp_map.newmap;
我读过关于创建子查询的内容,但找不到任何相关的示例,因此如果有人能为我指明正确的方向或提供一个工作示例,我将不胜感激。
在本例中,我只做了5行,如果愿意,可以将限制更改为0100
UPDATE wp_postmeta,
(SELECT oldmap,newmap
FROM wp_map
ORDER BY oldmap,newmap limit 0,5)as wp_map
SET wp_postmeta.meta_value = wp_map.newmap
WHERE wp_map.oldmap = wp_postmeta.meta_value
你可以这样试试
UPDATE wp_postmeta t JOIN
(
SELECT p.meta_id, m.newmap
FROM wp_postmeta p JOIN wp_map m
ON p.meta_value = m.oldmap
ORDER BY p.meta_id
LIMIT 100
) s
ON t.meta_id = s.meta_id
SET t.meta_value = s.newmap;
这里有一个演示
它很不传统,但它应该会在紧要关头帮助你
SET @tmp_c = 0;
UPDATE
table1
INNER JOIN table2 ON table1.id = table2.id
INNER JOIN table3 ON table2.id = table3.id
SET
table1.remove_date = NOW() - INTERVAL 5 MONTH
WHERE
table1.active = 1
AND
(IF (table1.active = 1, @tmp_c := @tmp_c + 1 , 0 )) //This is to only increment the counter if the whole where matches
AND
@tmp_c <= 15 //Start ignoring row items as soon as it exceeds the limit amount
SET@tmp\u c=0;
更新
表1
table1.id=table2.id上的内部联接table2
table2.id=table3.id上的内部联接table3
设置
表1.删除日期=现在()-间隔5个月
哪里
表1.1=1
及
(IF(table1.active=1,@tmp_c:=@tmp_c+1,0))//这是仅当整个where匹配时递增计数器
及
@tmp_c我从未使用过phpMyAdmin,但我不明白为什么它会关心您要更新多少行。工作由服务器完成,而不是由phpMyAdmin完成。遗憾的是,您不能在多表UPDATE
查询中使用LIMIT
子句。也许您需要在中设置更大的事务超时phpAdmin@cha这是WPEngine托管,因此使用meta_id时不可能+1,并且每次运行后不必更改限制,很好@TinTran有没有办法加快速度?我有700000行POSTETA,我以限制1运行该查询,在本地机器上花了30分钟。不过,这将扫描整个wp_POSTETA表,因此它的性能不好。