javascript - MySQL条件过滤器处理
问题描述
我正在使用 node.js 并尝试基于多个过滤器进行查询,如果它们是真的
select * from orders ${isFilter ? 'where' : ''}
${orderId !== undefined && orderId ? `order_id = '${orderId}' or ` : '' }
${receiptId !== undefined && receiptId? `receipt_id = '${receiptId}' or `: '' }
${driver !== undefined && driver ? `driver_id = '${Number(driver)}'` : '' }
这在没有过滤器或所有过滤器都为真但OR
缺少一个或多个过滤器时会导致问题的情况下工作正常。处理这个问题的最佳方法是什么?
解决方案
这是动态组合查询的伪代码
var clause = 'where';
var query = 'select * from orders';
if (isFilter) { // this statement could be removed
if (orderId !== undefined && orderId) {
query += clause + ' order_id = `${orderId}`';
clause = 'or';
}
if (receiptId !== undefined && receiptId) {
query += clause + ' receiptId = `${receiptId}`';
clause = 'or';
}
if (driver !== undefined && driver) {
query += clause + ' driver = `${driver}`';
clause = 'or'; // this is not really needed, but it could be useful for further filters in future
}
}
推荐阅读
- javascript - CSP 中源“未定义”的脚本是什么意思?
- inkscape - Inkscape:使同一路径的两个段平行或垂直
- angularjs - AngularJS 中的双重 ng-view/ui-view,有可能吗?
- javascript - javascript中的日期验证器
- javascript - 当我将文件上传到 iis7 时,文件被截断
- php - 根据 varchar 值更新 DB(MySQL)
- c# - EasyPost USPS - 如何购买 Media Mail 货件?
- php - 通过 Ajax 将搜索词和自定义标志发送到 php 函数
- c# - 我需要在读取文件时忽略特定行
- r - 如果不知道路径/来源,如何在 Shiny 中播放音频文件?