有没有一种方法可以循环mysql(OR语句)以获取express.js中的多行

时间:2019-04-18 09:11:07

标签: mysql node.js api express

我有以下格式的json请求:

{
"claimNo":["5454545","4554454","45884"]

}

claimNo可以容纳任意数量的项目(不受限制)。我想获取值并编写查询以从mysql db获取数据,其中ClaimNo =请求中的值。 样本响应:

 "claims": [
    {
        "claimNo": "4554454",
        "ClaimCause": "gjgiukhknl",
        "ClaimAmount": 45550,
    },
    {
        "claimNo": "5454545",
        "ClaimCause": "fdfdfdfdf",
        "ClaimAmount": 0,
    }
]

我可以成功遍历请求并在终端上显示,甚至可以通过多个OR插入数据库,但这仅适用于有限的数组长度。

 req.body.claimNo.forEach(element => {
    // console.log(element)

    let sql = 'SELECT * FROM  claims WHERE claimNo = ?'

    connection.query(sql,element,(err, rows, fields) => {
            if(!err){
                // return res.json({
                //     success:true,
                //     errorCode:"",
                //     errorDescription:"",
                //     claims:rows
                // })
                console.log(rows)
            }else
            console.log(err)


    } )
})

2 个答案:

答案 0 :(得分:1)

如果我很好地理解了您的问题,那么您正在寻找一种查询MySQL数据库以获取多个claimNo条目并将结果作为单个结果返回的方法。

使用MySQL IN()运算符,您可以将查询写为select * from claims where claimNo in(?)

let sql = 'select * from claims where claimNo in(?)';

let claimNos = req.body.claimNo;

connection.query(sql, claimNos, (err, rows, fields) => {
        if(!err){
            // return res.json({
            //     success:true,
            //     errorCode:"",
            //     errorDescription:"",
            //     claims:rows
            // })
            console.log(rows)
        }else
        console.log(err)


})

答案 1 :(得分:0)

您不需要为每个claimNo发送单独的请求。您可以改为IN运算符。以下应该起作用:

const claimsNo = claims.map(claim => claim.claimNo);

const sql = 'SELECT & FROM claims where claimNo IN (?)';
connection.query(sql, [ tableName, claimsNo ], (err, rows, fields) =>{
   ...
});