Есть ли способ зациклить mysql (ИЛИ оператор) для извлечения нескольких строк в express.js

#mysql #node.js #api #express

#mysql #node.js #API #выражать

Вопрос:

У меня есть запрос json в этой форме:

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

}

claimNo может содержать любое количество элементов (не ограничено). Я хочу получить значения и написать запрос для извлечения данных из базы данных mysql, где claimNo = значения в запросе. пример ответа:

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

Я могу успешно выполнить цикл запроса и отобразить его на терминале или даже вставить в базу данных с несколькими ИЛИ, но это работает только для ограниченной длины массива.

  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)


    } )
})
 

Ответ №1:

Если я правильно понимаю ваш вопрос, вы ищете способ запросить базу данных MySQL для нескольких claimNo записей и вернуть результат как единый результат.

Используя MySQL В операторе(), вы можете записать свой запрос как 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)
})
 

Ответ №2:

Вам не нужно отправлять отдельный запрос для каждого claimNo . Вместо этого вы можете IN использовать оператора. Должно работать следующее:

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

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