我正在尝试为测验编写一些代码,其中测验是向用户发送的5个问题(每次尝试进行测验)但问题需要随机化而不是重复。 我们提出的问题总数为350,这也是用户在测验中可以回答的最大问题数。
要解决此问题,我正在尝试执行一些代码,其中我的服务器选择1到350之间的随机数。完成后,它会检查MySQL数据库以查看数字是否已包含在数据库中。如果数字在DB中,则重复该过程。如果找不到该号码,则将其添加到DB。此外,如果用户已经回答了350个问题,则代码应返回一个字符串,表示"您已完成测验"。
DB有一个名为users的表。用户具有userid(varchar)和question(int)。问题是选择随机数userid是播放器的用户ID。
我不知道从哪里开始写这个但是关于ti如何工作的概念如下,我要求一些帮助来解决这个问题。
let result = 0;
con.connect(function(err) {
if (err) throw err;
while (result >= 1)
{
let x = Math.floor((Math.random()*5)+1);
con.query("SELECT column1, column2 FROM users where column2 = x", function (err, result, fields)
{
if (err) throw err;
result = result.length;
});
}
var sql = "INSERT INTO users (column1, column2) VALUES ('a string', x)";
});
答案 0 :(得分:1)
我对Node.js一无所知 - 但是应该可以通过单个SQL查询来执行您想要的操作:
INSERT INTO users (column1, column2)
SELECT 'a string', numbers.x
FROM (
SELECT 1 as x UNION ALL
SELECT 2 as x UNION ALL
SELECT 3 as x UNION ALL
SELECT 4 as x UNION ALL
SELECT 5 as x
) as numbers
WHERE NOT EXISTS (
SELECT *
FROM users
WHERE users.column2 = numbers.x
)
ORDER BY rand()
LIMIT 1
它应该在第一个子查询中的随机行中插入一个数字,该数字在column2
表的users
中已经存在。