› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
downeywang
V2EX  ›  MySQL

请假一个 mysql 问题

  •  
  •   downeywang · Jun 5, 2019 · 4991 views
    This topic created in 2680 days ago, the information mentioned may be changed or developed.

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

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

    11 replies  •  2019-06-06 09:48:32 +08:00
    downeywang
        1
    downeywang  
    OP
       Jun 5, 2019
    数据顺序不需要和原来一样,只要子父级从属关系没有变化就可以。
    Takamine
        2
    Takamine  
       Jun 5, 2019 via Android
    可以写一个递递递递递递归归归归归归,重新更新一下值。:doge:
    Takamine
        3
    Takamine  
       Jun 6, 2019 via Android
    或者直接简单粗暴一点也行吧。
    就按照 level 来,设置一个变量 n 表示当前是该 level 的第几个就好啦(同一个 level 要是超过了 9999 那就当我没说_(:з」∠)_)。

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

    emmmmm...脑子已经睡着的状态了也不知道能不能帮到你_(:з」∠)_。
    gavindexu
        6
    gavindexu  
       Jun 6, 2019 via iPhone
    code 字段的长度有变动吗?
    没有变的话,考虑一下从长度入手?
    prophet1990
        7
    prophet1990  
       Jun 6, 2019
    用 python 写一个脚本操作数据库,根据 level 和 parentid 循环处理一下
    xuanbg
        8
    xuanbg  
       Jun 6, 2019
    两层循环,第一层根据 level,第二层根据 parentid,就是 parentid 对应的 code 后面重新生成序列作为 code。
    qwerthhusn
        9
    qwerthhusn  
       Jun 6, 2019
    先温习一下树的广度遍历算法,你就知道咋写了
    Terry001
        10
    Terry001  
       Jun 6, 2019
    先按长度分层,然后按顺序编号就行了
    jorneyr
        11
    jorneyr  
       Jun 6, 2019
    写程序重新生成一遍 code 吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1401 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 16:18 · PVG 00:18 · LAX 09:18 · JFK 12:18
    ♥ Do have faith in what you're doing.