我正在使用node.js,并試圖根據多個過濾器進行查詢,如果它們都是真的話
select * from orders ${isFilter ? 'where' : ''}{isFilter ?
${orderId !== undefined && orderId ? `order_id = '${orderId}' or ` : ''/span> }
${receiptId !== undefined && receiptId? `receipt_id = '${receiptId}' 或 `: '' }
${driver !== undefined && driver ? `driver_id = '${Number(driver)}'` : ' } !
這在沒有過濾器或所有過濾器都是真的情況下作業正常,但當缺少一個或多個過濾器時,OR會導致一個問題。
uj5u.com熱心網友回復:
這是一個動態組成查詢的偽代碼
這是一個動態組成查詢的偽代碼。
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.
}
}
uj5u.com熱心網友回復:
let whereClause = []。
if(orderId) whereClause.push(`order_id = '${orderId}');
if(receiptId) whereClause.push(`receipt_id = '${receiptId}') 。
if(driver) whereClause. push(`driver_id = ${parseInt(driver)}`) 。
let whereQuery = whereClause.join(' OR ')。
let sql = `select * from orders where true ${whereClause.length ? whereQuery : ' '};
嘗試使用join.這樣你就可以添加許多屬性,即使不按順序。另外,如果你希望它是未定義的,那么你可以洗掉它,因為它在條件陳述句中導致了錯誤。
uj5u.com熱心網友回復:
我認為,如果你能記錄下查詢,這將是合理的,我們可以確定正在發送的查詢。 這將是排除故障的第一步,也許我們可以使用你正在嘗試的方式,使用三元組運算子,并做一些修改。
uj5u.com熱心網友回復:
你上面用來構建查詢字串的代碼不可能涵蓋所有可能的情況。
舉個例子。 如果isFilter==false,并且3個變數orderId、receiptId和driver中的一個變數的值是!==undefined? => 你的查詢將是錯誤的,因為缺少WHERE陳述句。
另一種情況,如果其中一個變數orderId或receiptId滿足條件,而變數driver無效。 => 你的查詢將是錯誤的,因為在最后多了一個'OR'。
這是最有可能給上述代碼帶來問題的兩種情況。以下是我的建議,以解決你的問題:
queryString="select * from orders"
if(isFilter){
queryString ='where'。
if(orderId){
queryString =' ..... or'/span>
}
if(receiptId){
queryString =' ..... or'
}
if(driver) {
queryString =' .....'/span>
}
}
queryString=queryString.trim()
if(queryString.endsWith('or')){
queryString=queryString.substring(0,queryString.length-2)
}
if(queryString.endsWith('where')){
queryString=queryString.substring(0, queryString.length-5)
}
uj5u.com熱心網友回復:
select * from orders ${isFilter ? 'where 1=0' : ''}。
${orderId !== undefined && orderId ? `OR order_id = '${orderId}' ` : ' }
${receiptId !== undefined && receiptId? `OR receipt_id = '${receiptId}' `。'' }
${driver !== undefined && driver ? `OR driver_id = '${Number(driver)}'` : ' } !
如果是AND,你可以做1=1,而不是1=0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327638.html
標籤:
