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

网站的相关性 实用性网站建设项目登记表

网站的相关性 实用性,网站建设项目登记表,钉子wordpress主题,宽屏网站尺寸简单场景:存在一个知识库,需要统计知识库下文件的个数在这个场景中对知识库中文件计数还是比较简单可以实现,只需要进行对数据库查询时增加对知识库空间ID的筛查就可以实现大致SQL查询语句SELECTspace_code as code,COUNT(*) AS code_countFR…

简单场景:存在一个知识库,需要统计知识库下文件的个数

在这个场景中对知识库中文件计数还是比较简单可以实现,只需要进行对数据库查询时增加对知识库空间ID的筛查就可以实现

大致SQL查询语句

        SELECTspace_code as code,COUNT(*) AS code_countFROMkb_pageWHEREtype != 'FOLDER'AND status = 'PUBLISHED'AND tenant_id = #{tenantId}AND space_code IN<foreach collection="spaceCodesList" item="spaceCode" open="(" separator="," close=")">#{spaceCode}</foreach>GROUP BYspace_code;

现在有一个新的场景,需要统计在每个知识库下,存在不同层级的文件夹📁,需要统计不同层级文件夹下文件的个数,如何进行实现?

最开始考虑的是,文件夹能实现父子级别关联,数据库会存在一个code和parentCode进行关联。可以通过递归的方式进行深度检索,从而计算出不同文件夹下的文件个数。但是这个方案会存在性能问题,假如文件夹数量和层级众多,不是特别可行。

最终采取的计数方案是,数据库中存在一个对每一个文件都拥有一个全路径编码,不管当前文件的类型是word,excel,ppt,md等等等等。都会为其生成一个全路径编码,例如:1111,2222,3333,4444. 这个编码意味着当前该文件的级别是在第四级。

交代完上述的方案设计,如何进行代码层面的计数实现:

            for (PageTreeResp item : result) {if (PageTypes.FOLDER.name().equals(item.getType())) {int fileCount = countFilesByFullParentCode(item.getCode(), item.getSpaceCode(), sysUserInfo.getTenantId());item.setCodeCount(String.valueOf(fileCount));}}## 具体的代码计算逻辑/*** 使用数据库 full_parent_code 统计文件夹下所有子孙文件数量(排除文件夹本身,type != FOLDER)* 保证同一租户、同一空间内统计。*/private int countFilesByFullParentCode(String folderCode, String spaceCode, String tenantId) {LambdaQueryWrapper<KbPage> wrapper = new LambdaQueryWrapper<>();wrapper.eq(KbPage::getTenantId, tenantId);wrapper.eq(KbPage::getSpaceCode, spaceCode);wrapper.eq(KbPage::getStatus, KBPageStatus.PUBLISHED.name());// full_parent_code 中以逗号分隔父级编码,使用分隔符匹配避免误匹配wrapper.apply("INSTR(CONCAT(',', full_parent_code, ','), CONCAT(',', {0}, ',')) > 0", folderCode);// 只统计非文件夹类型wrapper.ne(KbPage::getType, KbPageTypes.FOLDER.name());return Math.toIntExact(kbPageMapper.selectCount(wrapper));}

上述查询逻辑的详细解析

一、先看整体 SQL 生成出来长什么样
假设
folderCode = “abc”
full_parent_code 里存的值是 “root,abc,xyz”

那么这一行最终被拼成:

-- 伪 SQL
WHERE ...AND INSTR(CONCAT(',', full_parent_code, ','), ',abc,') > 0

二、为什么要这么写

  1. full_parent_code 存的是“从根到当前节点”的父节点编码,用英文逗号分隔,例如:
    root,abc,xyz
  2. 需求:找出“abc”这个文件夹下面的所有子孙节点(包括子文件夹里的文件)。
    换句话说只要 full_parent_code 里出现过 abc 就算命中。
  3. 如果直接写简单的 LIKE ‘%abc%’,当存在编码为 abc1、xabc 等节点时也会被错误匹配(模糊匹配会把包含子串的都选出来)。
  4. 因此把两端也补上逗号,再匹配 “,abc,” 就能保证只匹配完整的一段编码,不会误伤。

三、函数拆解

  • CONCAT(‘,’, full_parent_code, ‘,’)
    给原来的字符串前后各加一个逗号 → “,root,abc,xyz,”

  • CONSTR(‘,’, {0}, ‘,’)
    把传入的 folderCode 前后也加逗号 → “,abc,”

  • INSTR(str, substr)
    MySQL 内置函数:返回 substr 在 str 中第一次出现的位置(从 1 开始计数),找不到则返回 0。

  • INSTR(…) > 0
    只要大于 0 就说明找到了,于是这条记录就是 folderCode 的子孙。

四、总结一句话
通过“前后补逗号再精确匹配”的技巧,避免了 LIKE 的模糊误差,从而可靠地判断某条记录的 full_parent_code 里是否包含指定的 folderCode,即该记录是否位于该文件夹之下。

http://www.dtcms.com/a/570500.html

相关文章:

  • 深圳本地做网站wordpress 文章列表只显示标题
  • notion模版 | 小胡的第二大脑[特殊字符]-任务篇
  • harmonyos的鸿蒙的跳转页面的部署
  • Godaddy优惠码网站怎么做的红豆梧州论坛
  • 商户查询缓存、商户更新缓存(opsForHash、opsForList、ObjectMapper、@Transactional、@PutMapping、RequestParam、装箱拆箱、线程池)
  • 做网站如何推销网站建设论证方案
  • 济南企业网站推广网络销售的工作内容
  • 大神自己做的下载音乐的网站域名是什么意思举个例子
  • Python中常用内置函数下【含代码理解】
  • QuickDruid
  • Java 文件上传-阿里云OSS对象存储
  • 国外 网站源码西部建设公司官网
  • 深圳做h5网站设计济南冰河世纪网站建设
  • 如何为公司做网站施工企业风险防控
  • 宁波市高等级公路建设指挥部网站wordpress建企业网站设置
  • 网站广告招商应该怎么做昆明大型网页开发企业
  • helmfile使用指南
  • 平谷做网站wordpress 百万ip
  • 网站开发兼职群网店装修网站
  • 网站开发设计资讯用php做图书管理网站
  • 博客建站系统设计网站p站
  • 有什么网站可以做简历深圳网站开发哪些
  • 如何做国外的电商网站设计企业网站建设费
  • RT-Thread 在SD卡实现ulog+时间戳保存不同日志方法
  • 移动网站与pc网站wordpress 页面文章列表
  • 山西响应式网站建设设计软件技术是干什么的
  • 网站被k怎么恢复南京那些公司做网站
  • 网站建设2种账号体系专业h5网站建设教程
  • 什么网站发布找做效果图的装饰公司排名
  • 广州网页设计网站网站建设毕业设计开题报告