正在根据另一列更新 MySql 列

Updating MySql Column based on another Column

我对 MySQL 还是很陌生,我只是 运行 遇到了一个我似乎无法弄清楚的问题。

假设我有一个名为“tracks”的 table,其中包含以下列和样本数据

track_hash | track_order 
abc        | 1
abc        | 2
abc        | 3
abc        | 4
def        | 1
def        | 2
ghi        | 1

所以重点是当我显示曲目时,曲目应该按曲目顺序排序。因此,如果我想显示来自 abc 的所有曲目,它将根据曲目顺序 (1、2、3) 显示它。曲目哈希“def”有两个曲目...等等

所以目前在我的数据库中只有一个空的 track_order 列。我将如何用正确的数据填充 track_order 列?

我想您可能正在寻找 user defined variables

你可以这样做:

SET @t1=0; 
insert into `tablename` (track_order) values(@t1 := @t1+1) where id = some_id

我不完全确定您将如何为数据库中的每条记录执行此操作。我认为这应该可行,但这是在每个 id 的基础上进行的(如果这样更好,您可以将其设置为 track_hash)。不确定这是否适合你?

您必须以这种方式为每个 track_hash 手动执行此操作,因此如果您有很多不同的 track_hash 记录,可能值得弄清楚如何为所有记录执行此操作他们一口气。但我不确定该怎么做。

您可以使用 update 和用户定义的变量来执行此操作。但是,您有一个根本问题。 SQL tables代表无序集合。因此,table 中没有固有的顺序,除非列指定顺序。

让我假设有一个名为 id 的列。然后执行以下操作:

update tracks t
    set t.track_order = if(@th = t.track_hash, (@rn := coalesce(@rn, 0) + 1),
                           if(@th := t.track_hash, @rn := 1, @rn := 1)
                          )
    order by t.track_hash, t.id;

您不必为此工作初始化变量,但您可以在 update 之前初始化它们。