Node.js Sqlite:使用另一个表中的信息插入或更新表

Node.js Sqlite:使用另一个表中的信息插入或更新表,node.js,sqlite,discord.js,Node.js,Sqlite,Discord.js,我是sqlite的新手,正在创建一个不和谐的琐事机器人,它有一个负责跟踪每个用户正确答案数量的领导委员会。我不知道如何在一个新问题正确时添加新行,或者在另一个已经得到正确答案的人正确回答问题时更新行。下面的代码只更新leader board表中答案表中的第一个用户ID。但答案表中可能有多个用户可以正确回答问题 我正在使用discord.js和sqlite库 各表的说明如下: 用户的答案在一个名为answers的表中进行跟踪。表answers具有userId和answer属性。userId是给出答

我是sqlite的新手,正在创建一个不和谐的琐事机器人,它有一个负责跟踪每个用户正确答案数量的领导委员会。我不知道如何在一个新问题正确时添加新行,或者在另一个已经得到正确答案的人正确回答问题时更新行。下面的代码只更新leader board表中答案表中的第一个用户ID。但答案表中可能有多个用户可以正确回答问题

我正在使用discord.js和sqlite库

各表的说明如下:

用户的答案在一个名为answers的表中进行跟踪。表answers具有userId和answer属性。userId是给出答案的用户的id,而答案是用户的选择

还有一个叫做排行榜的表格,它跟踪每个用户的正确答案数量。表格排行榜的属性是userId和number。userId是用户的id,number是正确答案的数量

cAnswer = 'c';
sql.get(`SELECT * FROM answers WHERE answer ="${cAnswer}"`).then(aRow => {
    if (aRow){
        sql.get(`SELECT * FROM leaderboard WHERE userId ="${aRow.userId}"`).then(lRow => {
            if (!lRow){
                sql.run("INSERT INTO leaderboard (userId, number) VALUES (?, ?)", [aRow.userId, 1]);
            }
            else{
                num = lRow.number + 1;
                sql.run(`UPDATE leaderboard SET number = ${num} WHERE userId = ${aRow.userId}`);
            }
            const user = client.users.get(aRow.userId);
            user.send("You answered the jeep trivia question correctly!\nThe correct answer was *" + cAnswer + "*.");
        }).catch(() => {
            console.error;
            sql.run("CREATE TABLE IF NOT EXISTS leaderboard (userId TEXT, number INT)").then(() => {
                sql.run("INSERT INTO leaderboard (userId, number) VALUES (?, ?)", [aRow.userId, 1]);
            });
            const user = client.users.get(aRow.userId);
            user.send("You answered the jeep trivia question correctly!\nThe correct answer was *" + cAnswer + "*.");
        });
    }

}).catch(() => {
    console.error;
});

我认为在单独的表格中有两个答案栏是与标准化相反的,一个答案栏就足够了,可以简化您的问题

例如,假设我们有一个问题/问题表,定义为:-

CREATE TABLE problems (problemid INTEGER PRIMARY KEY, problem TEXT, answer TEXT)
CREATE TABLE users (userid INTEGER PRIMARY KEY, username TEXT)
CREATE TABLE answers (userref INTEGER, problemref INTEGER, answer INTEGER DEFAULT 0, PRIMARY KEY (userref, problemref))
在本例中,其中包含2个问题,如下所示:- 有一个用户表定义为:-

CREATE TABLE problems (problemid INTEGER PRIMARY KEY, problem TEXT, answer TEXT)
CREATE TABLE users (userid INTEGER PRIMARY KEY, username TEXT)
CREATE TABLE answers (userref INTEGER, problemref INTEGER, answer INTEGER DEFAULT 0, PRIMARY KEY (userref, problemref))
其中包含3个用户,如下所示:- 最后是一个答案表,定义如下:-

CREATE TABLE problems (problemid INTEGER PRIMARY KEY, problem TEXT, answer TEXT)
CREATE TABLE users (userid INTEGER PRIMARY KEY, username TEXT)
CREATE TABLE answers (userref INTEGER, problemref INTEGER, answer INTEGER DEFAULT 0, PRIMARY KEY (userref, problemref))
其中填充了一些答案,注意答案列将包含0表示错误答案,1表示正确答案,userref列引用相应的用户,problemref列引用相应的问题:- 所以第一行是说用户1 Fred错误地回答了问题1。 第二排是说Fred正确回答了问题2。 第三,伯特错误地回答了问题2。 第四,汤姆正确地回答了问题2。 以下查询将生成排行榜:-

SELECT username||' got '||sum(answers.answer)||' correct.' AS number_correct
FROM answers 
    JOIN users ON userref = userid
GROUP BY userref ORDER BY sum(answers.answer) DESC
看起来像:-

然后,您只有一列要维护。如果要满足重新尝试的需要,只需插入行,然后检查插入是否不正常,然后更新行。

console.error语句是否有效?我认为在每个.catch语句中都应该这样做:.catcherr=>{console.errorerr;};