Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
Php 在单个查询的每次更新中将列更新为最大列数。_Php_Mysql_Sql_Sql Update - Fatal编程技术网

Php 在单个查询的每次更新中将列更新为最大列数。

Php 在单个查询的每次更新中将列更新为最大列数。,php,mysql,sql,sql-update,Php,Mysql,Sql,Sql Update,我想在单个查询中将值为0的列更新为该列的最大值 有许多值为0的记录 我正在这样做: UPDATE table SET field = (SELECT MAX(field) + 1) WHERE field = 0; 但它会将每个记录更新为相同的值。 我们可以在每行更新中获得最大值吗?您似乎希望从下一个可能的值开始递增该值。这里有一种方法: update table t cross join (select @rn := max(field) from table) var

我想在单个查询中将值为0的列更新为该列的最大值

有许多值为0的记录

我正在这样做:

UPDATE table SET field = (SELECT MAX(field) + 1) WHERE field = 0;
但它会将每个记录更新为相同的值。 我们可以在每行更新中获得最大值吗?

您似乎希望从下一个可能的值开始递增该值。这里有一种方法:

update table t cross join
       (select @rn := max(field) from table) var
    set t.field = (@rn := @rn + 1)
    where field = 0;

我不明白:为什么每次更新时最大值都会改变?Max是Max,即使在更新后也始终不变。您能提供表吗structure@LorenzoMarcon假设有3条记录为0。若它将第一个更新为最大值101,则剩余的两个应为102和103。但它每一个都有101个。@Snehal-like:id | int| field它的工作原理是:只需要一点修正。。。更新表t交叉连接select@rn:=从表变量集合t中选择maxfield=@rn:=@rn+1,其中field=0@维塔尔。它不需要额外的子查询。该查询已修复。