gpt4 book ai didi

mysql - 我想检查数组中的任何值是否在数据库中

转载 作者:行者123 更新时间:2023-11-29 02:38:54 25 4
gpt4 key购买 nike

总结

我想检查我的数组中是否有任何值在数据库中,如果没有则添加它们?

我正在使用 node.js 进行编程,并且有一个“.js”脚本可以解析 HTML 文件中的数据并将记录添加到数组中。

这些值存储在一个名为“json”的数组中,并且是字符串,

该数据库是一个 MySQL 数据库,我使用 xampp/PHPMyAdmin 查看其中的数据,在我的 node.js 程序中使用模块“MySQL”。

我使用的函数如下,它是一个异步函数,将记录(如果有)返回到结果变量。

检查底部的伪代码,清楚地了解我正在尝试做什么。

抱歉英语不好:)

问题/问题

我遇到的问题是“get-record-from-the-database”/“con.query”函数运行,然后没有时间在程序结束前实际获取值,因为它异步,

我尝试过 await 和 promises,但经验不足,想学习。

我知道解决方案需要等待和 promise ,但我已经尝试了几个小时,也研究了几个小时。

我需要在程序的其余部分之前完全完成该功能。

获取数据库记录函数

var json = ['value1', 'value2'];
var sql = "SELECT * FROM `table` WHERE `table_name` = '"+ json[i] +"'";

con.connect(function(err) {
con.query(sql, function (err, result, fields) {
console.log(result);
});
});

我希望我的数组中尚未添加到数据库中的任何记录都被添加,

这是因为程序会一遍又一遍地运行,所以我不想一遍又一遍地添加相同的记录,只添加新记录。

伪代码

LOOP FOR ALL RECORDS IN jsonArray
{
CHECK IF THE ARRAY RECORD IS IN DATABASE

IF(arrayRecord IS NOT IN database)
{
ADD arrayRecord INTO database
}

IF(arrayRecord IS IN database)
{
DO NOTHING
}
}

使用循环 - 更新 1

使用此循环检查该项目是否在数据库中,如果不在,则添加它:

for (var i = 0; i < json.length; i++) 
{
var sql = "SELECT * FROM `table` WHERE `table_name` = '" + json[i] + "'";

con.connect(function(err) {
con.query(sql, function(err, result, fields) {

if (result == null)
{
var sql = "INSERT INTO table (table_name) VALUES('" + json[i] + "')";
con.query(sql, function(err, result) {
console.log("1 record inserted" + ":" + sql + ":" + i + ":" + json[i]);
});
}

});
});
}

我在使用循环时得到以下结果

console.log("1 record inserted" + ":" + sql + ":" + i + ":" + json[i]);

1 record inserted:INSERT INTO table (table_name) VALUES('undefined'):6:undefined
1 record inserted:INSERT INTO table (table_name) VALUES('undefined'):6:undefined
1 record inserted:INSERT INTO table (table_name) VALUES('undefined'):6:undefined
1 record inserted:INSERT INTO table (table_name) VALUES('undefined'):6:undefined
1 record inserted:INSERT INTO table (table_name) VALUES('undefined'):6:undefined
1 record inserted:INSERT INTO table (table_name) VALUES('undefined'):6:undefined

它似乎在不检查上面的代码是否实际工作的情况下快速循环通过循环,然后当循环达到 6 时它会触发所有 con.query 函数。

检查记录是否在数据库中的解决方案 - 更新 2

function check_database()   {

//Define sql query text
var sql = "";

//compile all my queries for each record in array so that they can be .queried
for (var i = 0; i < json.length; i++){
sql += 'SELECT * FROM table WHERE table_name = "' + json[i] + '"; ';
}

//This is a single multi query, I enter my long string of all queries ready to be checked.
connection.query(sql, [1, json.length], function(err, results) {
if (err) throw err;

//Once done I need to cycle through the results array to check if any have returned a record hence are inside the db
for (var i = 0; i < json.length; i++){

//If the record has a length then it's returned a record so it's added.
if(!results[i].length)
{
//Otherwise No length means no record return, means no record in database
console.log("Record for: " + json[i] + " ||| NEEDS ADDING");
} else {

console.log("Record for: " + json[i] + " ||| IS A RECORD");
}
}
});

connection.end();

}

“json”是数组名我里面有需要查询的记录

完整创建的最终解决方案 - 更新 3

在下面找到解决方案。

最佳答案

for (var i = 0; i < json.length; i++) {
var sql = "SELECT * FROM `table` WHERE `table_name` = '" + json[i] + "'";
con.query(sql, function(err, result, fields) {
if (err) {
throw err;
}
if (!result[0]) {
var sql = "INSERT INTO `table` VALUES('" + json[i] + "')";
con.query(sql, function(err, result, fields) {
if (err) {
throw err;
}
});
}
});
}

希望有用

关于mysql - 我想检查数组中的任何值是否在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57138048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com