更新表中的所有用户记录,并将low_id 1填充到N.

时间:2014-08-26 17:19:50

标签: php mysql

我有一个包含字段的表

表A)

当我运行sql命令

SELECT  id,
        user,
        `low_id`
FROM    (   SELECT @r:= IF(@u = user, @r + 1,1) AS `low_id`,
                    id,
                    user,
                    @u:= user
            FROM    usertest,
                    (SELECT @i:= 1) AS r,
                    (SELECT @u:= 0) AS u
            ORDER BY user
        ) AS usertest

表B) 我按以下方式选择

Id   user    low_ID
--------------------
1    100      1
2    200      1
3    100      Null
4    300      1
5    300      Null
6    100      Null
-------------------

我希望上面的代码能够为每个用户记录永久更新序列1-n中的low_id 然后计数器重置为1以供下一个用户使用,并将每个低id值增加1 该用户的记录。

我想更新表格a),如表c)

表C)

Id   user    low_ID
--------------------
1    100      1
2    200      1
3    100      2
4    300      1
5    300      2
6    100      3
-------------------

1 个答案:

答案 0 :(得分:1)

简单..按用户排序数据并计算次数..

UPDATE users u,
(   SELECT id, if(@a = user, @b:=@b+1, @b:=1) as new_low, @a:= user
    FROM users
    CROSS JOIN(SELECT @a:=0, @b:=1)t
    ORDER BY user, id
) t1
SET u.low_id = t1.new_low
WHERE u.id = t1.id;

DEMO