当前位置: 首页 > news >正文

广州网站设计成功柚米/常宁seo外包

广州网站设计成功柚米,常宁seo外包,专业的开发网站建设,百度域名ip是多少最近因工作需要接触了一下node,使用过程中遇到了一个需求,需要编写一个脚本,将Excel中的数据插入数据库,但是这个数据是一个树形结构,插入数据库需要插入当前叶子节点的父节点。 像上图一样,每行都是一个数…

最近因工作需要接触了一下node,使用过程中遇到了一个需求,需要编写一个脚本,将Excel中的数据插入数据库,但是这个数据是一个树形结构,插入数据库需要插入当前叶子节点的父节点。
在这里插入图片描述
像上图一样,每行都是一个数据,每行的最后一个数据就是要保存的节点,摆上库表结构:
在这里插入图片描述
问题的难点便是导入数据的时候找到节点的父节点id,这里只有路径的中文名称,所以根据中文名称去查询id会遇到名称相同的情况,这样的情况id就不是唯一了,该怎么选择呢?
通过思考,既然给出了中文的路径,也可以用这中文的路径去判断到底应该选哪个父节点呀。
思路:

  • 插入数据如果当前行长度为1说明只有一个一级节点,直接插入,父节点id为0;
  • 当前行长度不为1时是非一级(根)节点,根据父节点名称去查(数据库)父节点id,如果返回一条说明只有一个,将当前节点的父节点设为返回的id即可;
  • 如果返回多个,即根据名称查到多个”父节点“,此时遍历查询到的集合,去递归查询他们的path路径,与当前行读取到的path进行比较,如果相同说明找到当前节点的父节点,进行赋值即可。

下面看一下具体实现过程:


const xlsx = require('node-xlsx');
let sheets = xlsx.parse("./data.xlsx");
let knDB = require("/mysql/KnDb");async function main() {try {for (let sheet of sheets) {let gradeName = sheet.name.substr(0, 2)let courseName = sheet.name.substr(2, 2)let gradeId = 0;let courseId = 0;switch (gradeName) {case "小学":gradeId = Number(92)breakcase "初中":gradeId = Number(93)breakcase "高中":gradeId = Number(5)break}switch (courseName) {case "语文":courseId = Number(11)breakcase "数学":courseId = Number(12)breakcase "英语":courseId = Number(13)break}console.log("年级:" + gradeName + "学科:" + courseName)for (let rowId in sheet['data']) {let saveValue;let obj = new Map();if (sheet['data'][rowId].length <= 0) {//空行continue}let row = sheet['data'][rowId];saveValue = row[row.length - 1]obj.set("id", Number(rowId) + 1)obj.set("path", row) //存放路径obj.set("value", saveValue)if (row.length <= 1) {//只有一级obj.set("parent", 0)} else {//根据父类的名字查询父id的时候可能查到重名的let tempInfo = await knDB.getInfoByName(gradeId,courseId,row[row.length - 2]);if (tempInfo.length > 1) {//存在多个相同名称的for (let t of tempInfo) {let arr = new Array()// arr.push(saveValue)arr = await getPath(t.id, arr);let path = arr.reverse();if (path.toString() === row.slice(0, -1).toString()) {obj.set("parent", t.id)break}}} else {obj.set("parent", tempInfo[0].id)}}let knowledgePointData = new knowledge();knowledgePointData.gradeId = Number(gradeId)knowledgePointData.courseId = Number(courseId)knowledgePointData.title = obj.get("value")knowledgePointData.parentId = Number(obj.get("parent"))knowledgePointData.type = Number(0)if (knowledgePointData.parentId != Number(0)) {knowledgePointData.type = Number(1)}knowledgePointData.rootId = Number(0)let exist = false;exist = await isExist(knowledgePointData);//插入之前检查是否已经插入过数据,防止重复插入if (exist) {continue}console.log("新增知识点:" + JSON.stringify(knowledgePointData))await knDB.createKnowledgePoint(knowledgePointData)}}} catch (e) {console.error(e)} finally {process.exit()}
}/*** 根据id查询路径**/
async function getPath(id, path) {let knInfo = await knDB.getInfoById(id);path.push(knInfo.title)if (knInfo.parentId != 0) {await getPath(knInfo.parentId, path)}return path
}async function isExist(knowledgePointData) {let count = await knDB.queryKnowledge(knowledgePointData);if (count > 0) {return true}return false
}function knowledge() {
}

以上便实现了树形数据的导入,看一下导入结果
在这里插入图片描述
使用其他语言按照这样的思路也可以实现数据的初始化导入

http://www.jmfq.cn/news/4937599.html

相关文章:

  • 网站安全检测入口/爱站网怎么使用
  • 网易企业邮箱是什么意思/seo外包顾问
  • 网站默认首页/怎么把自己的网站发布到网上
  • wordpress制作图床/网站推广与优化平台
  • 怎么建设一个外国网站/樱桃bt磁力天堂
  • 质量好网站建设加工/短视频推广app
  • 网站域名打不开的原因/怎么推广淘宝店铺
  • 优衣库网站建设/最近的头条新闻
  • 网络营销服务的特点有哪些/铁岭网站seo
  • 公司网站如何制作价格/全国新闻媒体发稿平台
  • 网站建设全套/成功的网络营销案例及分析
  • 公安网站备案 时间/白酒营销策划方案
  • 济南公积金网站/南京市网站seo整站优化
  • 企业邮箱在哪里查/优化百度百科
  • 做网站需要了解什么东西/卡一卡二卡三入口2021
  • 赣州网上商城/滕州网站建设优化
  • 顺德网站优化公司/怎样做网络推广营销
  • seo工作前景如何/哈尔滨seo关键词优化
  • 沪佳家装客服电话/冬镜seo
  • 网站建设开发工具/如何开发微信小程序
  • 大连甘井子区小学排名一览表/搜索引擎优化公司排行
  • 做衣服外单网站有哪些/搜索网站排名
  • 神华科技网站建设/适合30岁短期培训班
  • 唐山住房和城乡建设局网站/网站展示型推广
  • java社交网站开发/做百度网站一年多少钱
  • 24手表网站/网站建设问一问公司
  • 沈阳网站建设开发/长春seo
  • 遵义公司做网站/2345网址导航电脑版官网
  • 委托别人做网站_域名所有权/关键词挖掘网站
  • 网站设计平台 动易/百度网站优化公司