gpt4 book ai didi

MySQL 使用组的 rowid 更新列值

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:29 24 4
gpt4 key购买 nike

我有一个图像表,它与特定组 (vehID) 相关联,我需要为每个组创建它们的顺序。

这是我忘记设计的字段的初始图像条目位置。

我一直在玩 @row,但没走多远。

set @row= 0;
select @row:=@row+1 as row, vehID,imgID from images group by vehID;

这给了我 rowID 但不会为每个组重置

每个 vehID 都有 1 到 n 个条目,我希望计算该值并使用计算值更新该行的条目。

我不知道如何在更改 vehID 时将@row 重置为 0。可能是一些子选择。

如果我能让 Select 工作任何关于如何编码 UPDATE(如果不明显)的建议,我将不胜感激

Update images set imgPosition = Calculated Value where imgID = current imgID

最佳答案

您只需要声明另一个变量来保存之前的车辆 ID。然后使用 IF 语句,您可以将 vehID 与前一个进行比较,并相应地设置行号。然后将前一个 vehID 变量设置为当前行的 vehID。

请注意,我将“分组依据”更改为“排序依据”。这有两个原因:

1- 列出所有行

2- 确保来自相同 id 的行彼此跟随。否则与之前的值比较将不正确。

最后,在重置前一个变量以保存当前行的值之前,请确保比较前一个 vehID 值并确定 rownum 是什么。

set @previous_vehID= 0;
set @row= 0;
select if(@previous_vehID=vehID, @row:=@row+1, @row:=1) as row,@previous_vehID:=vehID, vehID,imgID from images order by vehID

编辑:

我只是错过了更新部分。您可以为此尝试交叉表更新:

set @previous_vehID= 0;
set @row= 0;
update images a, (
select if(@previous_vehID=vehID, @row:=@row+1, @row:=1) as row,@previous_vehID:=vehID, vehID,imgID from images order by vehID ) aa
set a.imgPosition = aa.row where a.vehID=aa.vehID and a.imgID=aa.imgID

以上代码在单个语句/查询中进行选择和更新。如果不起作用,将结果插入临时表并使用它们在单独的语句中进行更新。

关于MySQL 使用组的 rowid 更新列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11590957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com