最近,做项目的时候,有一个需求,Excel批量导入树形结构功能,如何理解导入树形结构呢?就是要体现出父子关系,如果对于数据库来说,可以通过pid来表现。批量导入的数据存入数据库,当我们查询的时候,需要能够查询并显示出树形结构。
如果只是简单的批量导入听起来感觉还是蛮简单的,但是加上了一个树形结构,还是有些些复杂的
先介绍一下数据库需要存储的主要字段为主键id,计划名称,计划内容,计划时间和为了体现父子关系的pid,id和pid肯定是不会让用户来填写的
目前,有几套方案,但都是各有利弊:
方案一:该方案模板
该方案前提:
1.在原有的数据库字段(除了id和pid)的基础上,增加一个父计划名称字段
2.计划名称不能重复
实现:
1.首先我们要根据计划名称查询计划表,看计划表中是否存在与目前计划名称相同的名称,如果有的话,执行更新(或者向用户提示该条信息计划名称已存在于数据库当中),否则执行插入操作
2.根据父计划名称查询计划表,得到父计划id(pid),根据父计划名称更新pid
优点:实现简单
缺点:
1.需要用户手动输入父计划名称,用户可能误操作输错
2.计划名称不能重复
方案二:该方案模板
该方案前提:
需要为用户提供一份详细的使用说明,但是用户可能会不看,也可能存在用户看不懂的情况
实现:
1.一系列验证,确认导入数据没问题
2.将数据插入数据库,根据计划编号生成主键id,拿到主键id和计划层级进行映射得到pid
优点:
不限制计划名称
缺点:
对用户要求高
方案三:模板直接设置为树形结构
该方案前提:
用户能设计树形结构
实现:
按树形结构在表格中填入数据
优点:
用户操作简单
缺点:
表头设计不好控制,因为不能控制用户导入几层树形结构
方案四:
先选定父节点,导入的全部为该父节点的子节点
可以把方案四理解为在方案一的基础上进行的优化,Excel中父节点名称的位置不需要用户输入,而是用户在下拉框中进行选择,下拉框的数据来自数据库
此时有两种情况:
情况一:导入数据只是一个父节点下的子节点
此时,下拉框只有一条数据或者直接默认不需要用户进行选择,但是存在一个弊端,如果某一个父节点下的子节点很少,那么进行批量导入和手动录入就没有什么差别了,批量导入反而显得大材小用
情况二:导入数据为多个父节点下的子节点
此时,下拉框内存在多条数据,此时,数据来源有两种可能
一,数据库的所有节点
二,前端用户多次选择父节点,但是如何实现呢,目前没有思路
总结:小编目前经验较少,因此,实现思路比较狭窄,望广大网友提供更好的思路哦!比心❤