如何使用 .js 检查 SQL 数据库生成的随机数是否唯一?



我已经建立了一个网络应用程序,可以给参与者一个随机数字,但是,两个人不能得到相同的数字。他们在网站上输入自己的名字,然后点击"确定"按钮获得自己的号码。所有这些数据(我用唯一的随机模块生成的名称和随机生成的数字(都会被发送到MySQL数据库,并存储在那里供以后使用——我必须看看谁得到了哪个数字。

问题是,在将新的随机数和人名一起发送到数据库之前,我找不到一种方法来检查数据库中已经存在的所有数字,以检查新生成的数字是否已经存在。

简而言之,我想在插入一个新的随机数之前检查与数据库的冲突,该随机数必须对每一行都是唯一的,总共可以有100个数字(1-100(。如果代码捕捉到冲突,它应该生成一个新的数字,并再次检查冲突。

我基本上是在模拟每个人从帽子上画一个唯一的数字。

以下是我在node.js:中运行的JavaScript代码

// Unique random number generator module
const uniqueRandom = require('unique-random');
// Extracts an array of objects from SQL database and transforms it into a normal array with vallues (numbers)
var sqlNumberArray = []; //this array stores all numbers from SQL database
con.query("SELECT number FROM person", function test(err, result, fields) {
if (err) {
throw err;
} else {
result.map(function(obj) {
setValue(obj.number);
});
}
});
function setValue(value) {
sqlNumberArray = value;
console.log(sqlNumberArray);
};
// Checks if the random number is unique by comparing uniqueRandom to SQL entries
var numberWasChecked = ""
let random = uniqueRandom(1, 100);
var match = false;
for (var i = 0; i < sqlNumberArray.length && !match; i++) {
if (sqlNumberArray[i] == random) {
match = true;
}
}
if (match) {
window.alert("Please reload the page and try again, there was an error assigning you a number");
console.log("Random made a duplicate number... Oops!")
} else {
app.post('/createEntry', urlencodedParser, function(req, res, ) { //This code sends data to SQL
let values = [String(req.body.name), String(random())];
console.log(String(values));
var insert = "INSERT INTO person (name, number) VALUES (?)"
con.query(insert, [values], function(err, result) {
if (err) throw err;
console.log("A new value was inserted into database. Value input: " + values);
res.render(path.join(__dirname + '/numberServe'), {
number: values[1]
});
});
});
}

如果代码捕获到与数据库的冲突,它应该重新启动循环并获得一个新的数字。我是JavaScript和编码的新手,我试图掌握一切,但我没有足够的知识来想出解决方案:(我试着让它工作了一整天,但我只是没有主意。

提前选择以确定现有数字取决于比赛条件。

由于您希望数字是唯一的,请向数据库声明:

CREATE UNIQUE INDEX num_uniq person(number);

如果您碰巧在INSERT上遇到冲突,您将得到一个重复的密钥错误,此时您可以选择一个新号码并插入。

如果你用100个数字填充100个人,你可以使用异常处理代码来运行一个SELECT来示例使用的数字,并从随机数池中消除这些数字。

最新更新