JAVASCRIPT 前端数据库-V8--仙盟数据库架构-—-—仙盟创梦IDE

发布于:2025-07-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

老版本

在v1 版本中我们讲述了 基础版的应用

JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客

 接下载我们做一个更复杂的的其他场景

由于,V1查询字段必须 id

接下来我们修改了了代码

 JAVASCRIPT 前端数据库-V2--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客

由于,V2只能查询1个字段

接下来我们修改了了代码 

 JAVASCRIPT 前端数据库-V3--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客

v3 由于没有 清空 操作,多选

 JAVASCRIPT 前端数据库-V4--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客

v4由于没有 读取全部 操作

  JAVASCRIPT 前端数据库-V5--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客

由于V5没有 必须传入4个参数,不满足参数就没法调用

JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客

v6中没有加载默认数据,只能挨个加入

JAVASCRIPT 前端数据库-V7--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客

由于V7不支持超级sql,多条件 or and 和 like 技术 V8加入

仙盟创梦数据太虚V8

查询示例

  var sql=`商品编码 相似 ${key} 或者  商品名称 相似 ${key}  或者  商品条码 相似 ${key}   `;
           
           var 商品数据listSQL = 仙盟创梦数据太虚_商品.选择高级SQL(sql );
           
           console.log("商品数据listSQL=",商品数据listSQL);

本次新增代码

 

 选择高级SQL(sql) {
        // 分割SQL条件为多个子条件(改进版,支持中文操作符)
        const conditions = sql.split(/\s+(and|or|并且|或者)\s+/i)
            .map(part => part.trim())
            .filter(part => part.length > 0);
        
        // 解析条件数组,构建查询函数
        const parsedConditions = [];
        let logicalOperators = [];
        
        // 支持中文的操作符映射
        const operatorMap = {
            '大于': '>',
            '大于等于': '>=',
            '小于': '<',
            '小于等于': '<=',
            '等于': '=',
            '包含': 'like',
            '相似': 'like',
            '等于': '=',
            '>': '>',
            '>=': '>=',
            '<': '<',
            '<=': '<=',
            '=': '=',
            'like': 'like'
        };
        
        for (let i = 0; i < conditions.length; i++) {
            if (i % 2 === 0) {
                // 处理条件表达式(改进版,支持中文)
                const condition = conditions[i];
                // 支持中文和英文操作符的正则表达式
                const match = condition.match(/^([\u4e00-\u9fa5_a-zA-Z0-9]+)\s*(大于|大于等于|小于|小于等于|等于|包含|相似|like|>|>=|<|<=|=)\s*(.+)$/i);
                console.log("高级查parsedConditions:", parsedConditions);
                
                if (match) {
                    const [, field, operator, value] = match;
                    parsedConditions.push({
                        field,
                        operator: operatorMap[operator] || operator.toLowerCase(),
                        value: value.replace(/^['"]|['"]$/g, '') // 去除可能的引号
                    });
                }
            } else {
                // 处理逻辑运算符(改进版,支持中文)
                const op = conditions[i].toLowerCase();
                logicalOperators.push(
                    op === '并且' ? 'and' : 
                    op === '或者' ? 'or' : op
                );
            }
        }
        
        
         console.log("高级查parsedConditions:", parsedConditions);
        
        // 构建最终的过滤函数
        const queryFunction = (item) => {
            if (parsedConditions.length === 0) return true;
            
            let result = evaluateCondition(item, parsedConditions[0]);
            
            for (let i = 0; i < logicalOperators.length; i++) {
                const nextResult = evaluateCondition(item, parsedConditions[i + 1]);
                
                if (logicalOperators[i] === 'or') {
                    result = result || nextResult;
                } else if (logicalOperators[i] === 'and') {
                    result = result && nextResult;
                }
            }
            
            return result;
        };
        
        // 条件评估辅助函数
        function evaluateCondition(item, condition) {
            console.log("高级查询evaluateCondition:", item);
             console.log("高级查询evaluateCondition:", condition);
            
            const { field, operator, value } = condition;
            const itemValue = item[field];
            
            if (operator === '=') {
                return itemValue == value;
            } else if (operator === '>') {
                return itemValue > parseFloat(value);
            } else if (operator === '>=') {
                return itemValue >= parseFloat(value);
            } else if (operator === '<') {
                return itemValue < parseFloat(value);
            } else if (operator === '<=') {
                return itemValue <= parseFloat(value);
            } else if (operator === 'like') {
                return itemValue && itemValue.toString().includes(value);
            }
            
            return false;
        }
        
        console.log("高级查询条件:", sql);
         console.log("高级查询条件-queryFunction:", queryFunction);
        
        return this.灵蕴阁.filter(queryFunction);
}    

高级查询函数建设必要性

在企业级管理系统(如收银系统、进销存系统、开单系统和酒店系统)中,灵活高效的数据查询是核心需求之一。传统的固定条件查询无法满足复杂多变的业务场景,而 SQL 风格的高级查询功能具有以下建设必要性:

  1. 业务灵活性需求

  1. 收银员需要快速筛选某时间段内特定商品的销售记录
  2. 仓库管理员需要查询库存低于阈值或即将过期的商品
  3. 酒店前台需要检索满足特定条件(如价格区间、房型、入住时间)的空房
  4. 不同用户在不同场景下可能需要以不同维度查询数据,例如:

  5. 提升操作效率
    通过一次输入复杂条件即可获取精准结果,减少多次筛选和人工数据处理,显著提升工作效率。

  6. 降低培训成本
    对于熟悉 SQL 语法的用户,可以直接使用其习惯的查询方式,无需重新学习系统特定的查询规则。

  7. 统一数据访问接口
    提供标准化的查询接口,便于与其他系统(如数据分析平台、报表工具)集成。

应用场景示例

1. 收银系统

  • 场景:查询某时间段内,金额大于 1000 元且包含特定商品的订单
  • 查询示例
    日期 >= '2025-01-01' and 日期 <= '2025-01-31' and 金额 > 1000 and 商品名称 like '笔记本电脑'
  • 业务价值:快速定位高价值订单,分析客户购买习惯

2. 进销存系统

  • 场景:查询库存不足或即将过期的商品
  • 查询示例
    库存数量 < 10 or (保质期 < '2025-06-30' and 商品类别 = '食品')
  • 业务价值:及时预警库存风险,避免缺货或过期损失

3. 开单系统

  • 场景:检索未付款且超过约定账期的订单
  • 查询示例
    付款状态 = '未付款' and 账期日期 < CURDATE()
  • 业务价值:加强应收账款管理,降低坏账风险

4. 酒店系统

  • 场景:查询未来 7 天内,价格在 500-1000 元之间的空豪华双床房
  • 查询示例
    入住日期 >= CURDATE() and 入住日期 <= DATE_ADD(CURDATE(), INTERVAL 7 DAY) and 房型 = '豪华双床房' and 价格 >= 500 and 价格 <= 1000 and 状态 = '可预订'
  • 业务价值:提高客房预订效率,优化资源分配

技术优势

  1. 动态解析能力:支持运行时解析任意复杂条件,无需硬编码
  2. 多语言支持:中英文操作符混用,降低使用门槛
  3. 类型安全:自动处理数值与字符串类型比较
  4. 扩展性:易于添加新的操作符和逻辑连接词
  5. 性能优化:可结合索引机制优化大数据集查询效率

通过实现这样的高级查询功能,系统能够适应多样化的业务需求,为不同角色的用户提供强大而灵活的数据检索能力,从而提升整体业务运营效率。

阿雪技术观
让我们积极投身于技术共享的浪潮中,不仅仅是作为受益者,更要成为贡献者。无论是分享自己的代码、撰写技术博客,还是参与开源项目的维护和改进,每一个小小的举动都可能成为推动技术进步的巨大力量

Embrace open source and sharing, witness the miracle of technological progress, and enjoy the happy times of humanity! Let's actively join the wave of technology sharing. Not only as beneficiaries, but also as contributors. Whether sharing our own code, writing technical blogs, or participating in the maintenance and improvement of open source projects, every small action may become a huge force driving technological progress.


网站公告

今日签到

点亮在社区的每一天
去签到