根据另一列更新MySql列

时间:2015-03-02 01:23:05

标签: php mysql sql web

嘿伙计我仍然是MySQL的新手,我遇到了一个我似乎无法弄清楚的问题。

假设我有一个名为“tracks”的表,其中包含以下列和示例数据

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列?

2 个答案:

答案 0 :(得分:1)

您可以使用update和用户定义的变量执行此操作。但是,你有一个根本问题。 SQL表表示无序集。因此,除非列指定了订单,否则表中没有固有的排序。

我假设有一个名为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之前初始化它们。

答案 1 :(得分:0)

我想你可能在寻找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记录,那么可能需要弄清楚如何为所有这些记录执行此操作他们一气呵成。但我不确定如何做到这一点。