node.js+sql-插入查询比选择快吗?

2nbm6dog  于 2021-06-24  发布在  Mysql
关注(0)|答案(0)|浏览(200)

node.js中的sql有问题。
我有一个数组'data',其中包含一些从异步函数返回的数据,如果没有相同数据的结果,我想把它放到mysql数据库中。数组中有一些重复的对象,但我只想将其中一个放入数据库。
功能示例:

async function data_name(param){
    var data = [];
    data.push({
    name: param,
    sname: 'sname',
    url: 'url',
    report: 'report'
    });
    return data;
}

然后运行以下代码:

var data = await data_name('name');
data.forEach(item=>{
    var chk = "SELECT * FROM `?` WHERE `name` = ? AND `sname` = ?;";
    con.query(chk, [tablename, item.name, item.sname], function(er,items){
    if(er) throw er;
    if(items.length < 1){
        var insert = "INSERT INTO `?` (name, sname, url, report) VALUES (?,?,?,?)";
        con.query(insert, [tablename, item.name, item.sname, item.url, item.report], function(erg,added){
            if(erg) throw erg;
            console.log('Item added: ' + item.name);
        });
    }
    else{
        if(items[0].report != item.report){
            var upd = "UPDATE `?` SET report = ? WHERE id = ?";
            con.query(upd, [tablename, item.report, items[0].id], function(ere,edited){
                if(ere) throw ere;
                console.log('Item updated: ' +items[0].name);
                });
            }
        }
//broken code below
    var adc = "SELECT * FROM `links` WHERE `link` = ?;";
    con.query(adc, item.url, function(erc, results){    
        //tried also with: results[0] === undefined || results[0] === null
        var test = item.url + ' ' + results.length;
        console.log(test);
        if(results.length < 1){
            var add_c = "INSERT INTO `links` (link_name, link_url) VALUES (?,?)";
            con.query(add_c, [item.name, item.url], function(era, a_link){
                if(era) throw era;
            });
        }
        else{console.log('Record exists');}
    });
    });
});

第一个sql工作得很好:它将所有记录插入到数据库中,没有重复项,如果需要,它会更新值。
如果数据库为空,则第二个sql(在我之前输入的代码中的注解中提到)不能正常工作。它复制数据库中的记录(运行后,数据库有470条记录,而每条记录复制8次左右)。
测试变量,例如:
https://google.com 0
https://google.com 0
https://facebook.com 0
https://facebook.com 0
https://google.com 1
https://facebook.com 0
https://google.com 0
只有当数据库为空时,问题才存在(如果我再次运行代码,则第二个sql不会插入记录新记录并在控制台中打印“record exists”
你知道为什么吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题