Nodejs Mysql Select Count Запрос на вставку вложенного цикла - PullRequest
0 голосов
/ 04 июня 2018

Я новичок в nodejs и mysql.У меня есть массив объектов, которые я получаю из поста и хочу вставить его в базу данных MySQL.Если данные уже существуют, выполните запрос на обновление базы данных.Проблема в том, что запрос вставки не зацикливает весь массив.это просто вставить последнюю запись массива.Вот мой код:

Массив данных: bukukasData

[{transactionid: '562018965521', 
tanggal: '2018-06-05', 
kodeakun: 0, item: 'Saldo', 
debit: 100000, credit: 0, 
saldo: 100000},
{transactionid:'562018595664', 
tanggal:'2018-06-05', 
kodeakun: 0, 
item: 'Test Data', 
debit: 0, 
credit: 5000, 
saldo:95000}]

NodeJS Query

app.post('/api/addbukukas', function(req, res) {
    let bukukasData = req.body.bukukasData;
    var status = '';
    for (var i = 0; i < bukukasData.length; i++) {
        var transactionid = req.body.bukukasData[i].transactionid;
        var kodeakun = req.body.bukukasData[i].kodeakun;
        var item = req.body.bukukasData[i].item;
        var debit = req.body.bukukasData[i].debit;
        var credit = req.body.bukukasData[i].credit;
        var saldo = req.body.bukukasData[i].saldo;
        var tanggal = req.body.bukukasData[i].tanggal;

        db.query('SELECT COUNT (*) AS rowCount FROM bukukas WHERE transactionid = ?', [req.body.bukukasData[i].transactionid], function(error, result) {

            var rows = result[0].rowCount;
            if (rows > 0) {
                db.query('UPDATE bukukas SET transactionid=?, kodeakun=?, tanggal=?, item=?, debit=?, credit=?, saldo=?  WHERE transactionid = ?', [transactionid, kodeakun, tanggal, item, debit, credit, saldo, transactionid],
                    function(err, result) {
                        if (err) {

                            status = 'Update Gagal';
                        } else {
                            status = 'Update Success';
                        }
                    })
            } else {
                db.query('INSERT INTO bukukas (transactionid, kodeakun, tanggal, item, debit, credit, saldo) VALUES (?,?,?,?,?,?,?)', [transactionid, kodeakun, tanggal, item, debit, credit, saldo], function(err, insertresult) {

                    if (err) {
                        status = 'Insert Gagal';
                    } else {
                        status = "insertresult";
                    }
                })
            }

        })
    }
    console.log(status);
    return res.json({ status: status });
});

С этим кодомтолько данные, которые вставляются в базу данных, только последние данные в массиве.Как я могу вставить все данные в массиве в базу данных?Спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Используйте let вместо var.Это позволит избежать этой проблемы.

Источником этой проблемы является то, что в JavaScript цикл for перебирает переменную i и запускает bukukasData.length, умноженный на запрос db.Параметр дан в качестве ссылки.Поскольку цикл повторяется очень быстро, первый оператор sql запускается с i, установленным на последнее значение, и все db -выставления выполняются с i, установленным на bukukasData.length.let был введен в JavaScript для решения подобных проблем.С let он создаст копию переменной в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...