#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) =>{
...
});