请假一个 mysql 问题

2019-06-05 22:52:09 +08:00
 downeywang

有一个表,分为 4-5 个层级,每条都有一个父级 id,一级是 4 位 code,二级是 8 位,如表。 简化后表结构为:

现在表里的 code 列出问题,数据乱了,想根据 level 和 parentid 重新编一下 code,除了一级一级重编,请教一下大神有没有快捷的办法,因为数据量比较大,手动比较慢。

3909 次点击
所在节点    MySQL
11 条回复
downeywang
2019-06-05 22:54:19 +08:00
数据顺序不需要和原来一样,只要子父级从属关系没有变化就可以。
Takamine
2019-06-05 23:24:16 +08:00
可以写一个递递递递递递归归归归归归,重新更新一下值。:doge:
Takamine
2019-06-06 00:17:12 +08:00
或者直接简单粗暴一点也行吧。
就按照 level 来,设置一个变量 n 表示当前是该 level 的第几个就好啦(同一个 level 要是超过了 9999 那就当我没说_(:з」∠)_)。

code 如果是 string 的话。
看规律是 f ( level+1 )= f ( level )+str ( 1001*n )吧。
先把 level=2 的都拿出来,因为 level=1 的已经确定了,跑一遍,把 level=2 的确定了,再把 level=3 的拿出来跑,以此类推。(。ò ∀ ó。)
Takamine
2019-06-06 00:20:26 +08:00
f ( level )需要根据 pid 去找一下。
Takamine
2019-06-06 00:36:39 +08:00
Code ( id )= Code ( pid )+ str ( 1000+n )
这样写比较合适吧。(。ò ∀ ó。)

emmmmm...脑子已经睡着的状态了也不知道能不能帮到你_(:з」∠)_。
gavindexu
2019-06-06 07:02:27 +08:00
code 字段的长度有变动吗?
没有变的话,考虑一下从长度入手?
prophet1990
2019-06-06 09:05:19 +08:00
用 python 写一个脚本操作数据库,根据 level 和 parentid 循环处理一下
xuanbg
2019-06-06 09:09:02 +08:00
两层循环,第一层根据 level,第二层根据 parentid,就是 parentid 对应的 code 后面重新生成序列作为 code。
qwerthhusn
2019-06-06 09:18:30 +08:00
先温习一下树的广度遍历算法,你就知道咋写了
Terry001
2019-06-06 09:21:09 +08:00
先按长度分层,然后按顺序编号就行了
jorneyr
2019-06-06 09:48:32 +08:00
写程序重新生成一遍 code 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/571298

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX