Jslfl【软件开发技术笔记】

mysql根据一个字段相同记录生成序号

主要用于生成树型层级数据,如原始数据:

1
2
3
SELECT id_,name_,org_id_,org_cascade_id_
FROM sys_user
ORDER BY org_id_

结果:

id_ | name_ | org_id_ | org_cascade_id_
1	hp		 1	0
2	管理员		 1	0
3	超级用户	1	0
4	曹操	 	2	0.001
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
    id_,
    name_,
    org_id_,
    org_cascade_id_,
    CONCAT(org_cascade_id_,'.',LPAD(rank,4,'0')) uocascade
FROM (
    SELECT
        tmp.id_,
        tmp.name_,
        tmp.org_id_,
        tmp.org_cascade_id_,
        @rownum:=@rownum + 1,
        IF(@porg = tmp.org_id_, @rank:=@rank + 1, @rank:=1) AS rank,
        @porg:=tmp.org_id_
    FROM (
    SELECT id_,name_,org_id_,org_cascade_id_
    FROM sys_user
    ORDER BY org_id_
    ) tmp, (SELECT @rownum:=0, @porg:=NULL, @rank:=0) a
) RESULT

结果:

id_ | name_ | org_id_ | org_cascade_id_ | uocascade
1	hp		1	0	1	0.0001
2	管理员		1	0	2	0.0002
3	超级用户	1	0	3	0.0003
4	曹操		2	0.001	1	0.001.0001

,

Comments are currently closed.