选择一个数字检查数据库是否重复,如果不存储

时间:2018-05-28 18:38:19

标签: mysql node.js random

我正在尝试为测验编写一些代码,其中测验是向用户发送的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)";

});

1 个答案:

答案 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中已经存在。