正在根据另一列更新 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
之前初始化它们。
我对 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
之前初始化它们。