Есть ли способ зациклить MySQL (оператор OR) для извлечения нескольких строк в express.js - PullRequest
1 голос
/ 18 апреля 2019

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

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

}

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

 "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)


    } )
})

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Если я хорошо понимаю ваш вопрос, вы ищете способ запросить базу данных 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)


})
0 голосов
/ 18 апреля 2019

Вам не нужно отправлять отдельный запрос для каждого 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) =>{
   ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...