尝试基本上重新计算主列,即从第一列更新到最后一列,每行增加值。首先我选择,
select
`someid`,
`time`
from
`table`
ORDER BY
`time` ASC
获取结果,
$data = new SplFixedArray($query->num_rows);
$data = $query->fetch_all();
并更新表格。
for($i=1; $i<count($data); $i++){
print_r("UPDATING | New someid: " . $i . " WHERE old someid: " . $data[$i][0] . " AND time = " . $data[$i][1] . "<br />");
$query = $mysqli->query("UPDATE `table` SET `someid` = '" . $i . "' WHERE `time` = '" . $data[$i][1] . "' AND `someid` = '".$data[$i][0]."'");
}
令我困惑的是,前几个条目没有正确排序。它就像
someid | time
--------------
0 | 0
2 | 1
1 | 2
7 | 3
11 | 4
6 | 5
这是因为重复。在&#34; someid&#34;之后的15行之后有一个差距,它跳到60.所以之后没有更多的重复。但是我如何处理前几行呢?如果我想将someid更新为2但已经存在2?
如果不使用太多的查询来处理它的任何方法?
编辑:
也许某些人不清楚。基本上我试图刷新主列的int值。所以基本上我是在计算它们并在某个时间输入它们的相应数字。有时是日期时间。所以最早的&#34;有时&#34;会得到&#34; someid&#34; = 1。
此刻,某些人有差距。 1..2..3..4..5..6..7..15..16..17..18..30..31..32 正如我现在所做的那样,更新在我达到差距之前不会起作用。因为我试图写一个重复的值。将第一个someid更新为1(可能值为11)不起作用,因为某个地方已存在某个地方。
我会更新某个15到8,因为它是下一个数字。这是有效的,因为缺少8到14,我没有复制值。
一个解决方案可能是创建另一个循环并首先将每个someid更新为某个组合数字,也许从row-&gt; count开始计数,每行递增一次。在那之后,我可以更新它们,因为我正常做。但是没有更好的解决方案吗?
//更新:
此:
SET @count = 0;
UPDATE `table` SET `table`.`someid` = @count:= @count+ 1;
&#34;复位&#34; ID,但它没有按时间排序。
试试这个:
SET @count = 0;
UPDATE `table` SET `table`.`someid` = @count:= @count+ 1;
ORDER BY `time` DESC;
给我以下错误:
重复录入&#39; 1&#39;关键&#39; PRIMARY&#39;