Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL更新与限制连接_Mysql_Sql_Join_Phpmyadmin - Fatal编程技术网

MySQL更新与限制连接

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 这是我当

我想知道如何使用另一个表中的值更新一个表,诀窍是我需要设置一个限制,因为我有数千行要更新,而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

这是我当前的查询,但我需要在查询中添加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表,因此它的性能不好。