老版本
在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 風格的高級查詢功能具有以下建設必要性:
-
業務靈活性需求
- 收銀員需要快速篩選某時間段內特定商品的銷售記錄
- 倉庫管理員需要查詢庫存低于閾值或即將過期的商品
- 酒店前臺需要檢索滿足特定條件(如價格區間、房型、入住時間)的空房
-
不同用戶在不同場景下可能需要以不同維度查詢數據,例如:
-
提升操作效率
通過一次輸入復雜條件即可獲取精準結果,減少多次篩選和人工數據處理,顯著提升工作效率。 -
降低培訓成本
對于熟悉 SQL 語法的用戶,可以直接使用其習慣的查詢方式,無需重新學習系統特定的查詢規則。 -
統一數據訪問接口
提供標準化的查詢接口,便于與其他系統(如數據分析平臺、報表工具)集成。
應用場景示例
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 狀態 = '可預訂'
- 業務價值:提高客房預訂效率,優化資源分配
技術優勢
- 動態解析能力:支持運行時解析任意復雜條件,無需硬編碼
- 多語言支持:中英文操作符混用,降低使用門檻
- 類型安全:自動處理數值與字符串類型比較
- 擴展性:易于添加新的操作符和邏輯連接詞
- 性能優化:可結合索引機制優化大數據集查詢效率
通過實現這樣的高級查詢功能,系統能夠適應多樣化的業務需求,為不同角色的用戶提供強大而靈活的數據檢索能力,從而提升整體業務運營效率。
阿雪技術觀
讓我們積極投身于技術共享的浪潮中,不僅僅是作為受益者,更要成為貢獻者。無論是分享自己的代碼、撰寫技術博客,還是參與開源項目的維護和改進,每一個小小的舉動都可能成為推動技術進步的巨大力量
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.