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”
你知道为什么吗?
暂无答案!
目前还没有任何答案,快来回答吧!