我有2个函数用于根据用户ID访问单个数据库中的不同列。如果ID在数据库中没有行,我会在数据库中为该ID创建一个新行。但是,当我将这两个函数调用在一起时,程序最终会创建2个具有相同ID的新行,每个数据类型对应一个。
exports.addXp = (id, amt) => {
db.get(`SELECT userId, xp FROM userData WHERE userId = ?`, [id], (err, row) => {
if (err) return console.error(err.message);
if (!row) {
db.run(`INSERT INTO userData (userId, xp) VALUES (?, ?)`, [id, amt], (err) => {
if (err) console.error(err.message);
});
} else {
db.run(`UPDATE userData SET xp = ? WHERE userId = ?`, [row.xp + amt, id], (err) => {
if (err) console.error(err.message);
})
}
});
}
exports.addBal = (id, amt) => {
db.get(`SELECT userId, bal FROM userData WHERE userId = ?`, [id], (err, row) => {
if (err) return console.error(err.message);
if (!row) {
db.run(`INSERT INTO userData (userId, bal) VALUES (?, ?)`, [id, amt], (err) => {
if (err) console.error(err.message);
});
} else {
db.run(`UPDATE userData SET bal = ? WHERE userId = ?`, [row.bal + amt, id], (err) => {
if (err) console.error(err.message);
})
}
});
}
然后我将这些称为:
data.addXp(message.author.id, Math.floor(Math.random()*11 + 10));
data.addBal(message.author.id, Math.floor(Math.random()*3 + 3));
但是,如果数据库中不存在用户ID,则最后添加2行,其中一行具有用户ID和bal,一行具有ID和xp,而不是一行所有的价值观。我该如何解决这个问题?