Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Node.js+SQL-插入查询比选择查询快吗?_Mysql_Sql_Node.js_Foreach_Async Await - Fatal编程技术网

Mysql Node.js+SQL-插入查询比选择查询快吗?

Mysql Node.js+SQL-插入查询比选择查询快吗?,mysql,sql,node.js,foreach,async-await,Mysql,Sql,Node.js,Foreach,Async Await,我对node.js中的SQL有问题 我有一个数组“data”,其中包含一些从异步函数返回的数据,如果没有相同数据的结果,我想将其放入MySQL数据库。数组中有一些重复的对象,但我只想将其中一个放入数据库 功能示例: 然后运行以下代码: var data = await data_name('name'); data.forEach(item=>{ var chk = "SELECT * FROM `?` WHERE `name` = ? AND `sname` = ?;";

我对node.js中的SQL有问题

我有一个数组“data”,其中包含一些从异步函数返回的数据,如果没有相同数据的结果,我想将其放入MySQL数据库。数组中有一些重复的对象,但我只想将其中一个放入数据库

功能示例:

然后运行以下代码:

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次

eg的测试变量打印:

0 0 0 0 1. 0 0 只有当数据库为空时才存在问题如果我再次运行代码,第二个SQL不会插入记录新记录并在控制台中打印“记录存在”


你知道是什么原因吗

第一次,您的表有0条记录,因此result.length<1为真,导致insert查询运行并将数据插入表中。在对函数result.length<1的另一次调用中,值为false。因此执行else语句。@beingsrv如果没有记录,我想将记录放入表中,但我不想有重复的记录。若数据[0]有到数据库的链接并已将其插入数据库,则数据[1]应返回result.length=1,并在控制台中打印“Record exists”,我认为这是由于节点的异步性质,您会得到奇怪的结果。我建议使用承诺来运行查询,使操作1和2同步,dataFetch.then results=>{operation1.thenresults=>{//在这里为操作2做点什么}.catcherr@beingsrv谢谢;我通过从数组中删除重复项解决了这个问题:data=data.filterthing,index,self=>index==self.findIndext=>t.name==thing.name&&t.sname==thing.sname==thing.sname
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');}
    });
    });
});