Javascript node.js和mysql如果数据库中有1,如何获得2?
我想把+1添加到数据库中,如果在这个例子中我有1,那么数据库中就有2,我尝试了,但是得到了11,而不是2Javascript node.js和mysql如果数据库中有1,如何获得2?,javascript,mysql,node.js,Javascript,Mysql,Node.js,我想把+1添加到数据库中,如果在这个例子中我有1,那么数据库中就有2,我尝试了,但是得到了11,而不是2 if (result4.length) { var sql1 = `UPDATE level SET xp = '${result4[0].xp + 1}' WHERE xp = '${result4[0].xp}'`; connection.query(sql1, function(err, result) { if (err) throw err; }); } 以
if (result4.length) {
var sql1 = `UPDATE level SET xp = '${result4[0].xp + 1}' WHERE xp = '${result4[0].xp}'`;
connection.query(sql1, function(err, result) {
if (err) throw err;
});
}
以下是完整的来源,以防万一:
client.on("message", message => {
if (message.author.bot) return;
connection.query(`SELECT * FROM guildn WHERE id = '${message.guild.id}'`, function(err, result3) {
if (err) {
return console.log('Error1');
}
if (result3.length) {
connection.query(`SELECT * FROM level WHERE id = '${message.author.id}'`, function(err, result4) {
if (err) {
return console.log('Error1');
}
if (!result4.length) {
var sql = `INSERT INTO level (guild , id , nivel , xp) VALUES ('${message.guild.id}','${message.author.id}','0','1')`;
connection.query(sql, function(err, result) {
if (err) throw err;
console.log("1 record inserted");
return
});
}
if (result4.length) {
var sql1 = `UPDATE level SET xp = '${result4[0].xp + 1}' WHERE xp = '${result4[0].xp}'`;
connection.query(sql1, function(err, result) {
if (err) throw err;
});
}
});
}
});
});
我用谷歌翻译来写这篇文章,所以如果我在翻译中有任何错误,我很抱歉,我怀疑来自数据库
xp
的结果是一个字符串。这似乎合乎逻辑,因为您在查询中将其设置为字符串。在这种情况下,您可以这样做:
`UPDATE level SET xp = '${parseInt(result4[0].xp) + 1}' WHERE xp = '${result4[0].xp}'`;
这会将结果转换为一个数字,javascript将向其中添加1,而不是将1连接到字符串。我猜发生的情况是,您的XP数据以字符串形式存储在数据库中,因此您最终尝试将数字添加到字符串中。在Javascript中,这种情况下的结果是将数字连接到字符串的末尾,这就是为什么最后的结果是“11”而不是2 要在不更改数据库的情况下解决此问题,可以在向XP字符串添加1之前使用parseInt将其转换为整数:
var sql1 = `UPDATE level SET xp = '${ parseInt (result4[0].xp) + 1}' WHERE xp = '${result4[0].xp}'`;
如果
xp
的数据类型是一个字符串,则对更新调用稍加修改即可:
if (result4.length) {
const query = `UPDATE level SET xp = '${Number(result4[0].xp) + 1}' WHERE xp = '${result4[0].xp}'`;
connection.query(query, function(err, result) {
if (err) throw err;
});
}
这可能是因为
xp
的类型是字符串而不是整数。因此,如果两个或更多的人拥有相同数量的xp,他们都会得到+1WHERE xp='${result4[0].xp}'
我想你的意思是WHERE id='${message.author.id}'