因此,我试图编写一个更新查询,该查询将根据用户的签证或万事达卡来更新其资金。 如果当前余额和想要提取的金额小于10.000,则我要声明的内容以及导致错误的原因是要更新总和。如果不是这种情况,并且签证余额变得小于0,则会造成人为的错误,这样我以后就可以使用它来将用户重定向到错误页面(我知道这不是大多数PC方式)。 代码是这样的:
const connection = require('../models/loginrouters');
function takeMoney(amount, cardnumber) {
// prettier-ignore
console.log("db cardnumber is".cardnumber)
console.log('db amount is', amount);
connection.query(
"UPDATE users.usercards SET Balance = CASE WHEN type = 'visa' AND balance>'" +
amount +
"' THEN Balance - '" +
amount +
"' ELSE CASE WHEN type='mastercard' AND SUM(balance - '" +
amount +
"')<'-10000' THEN Balance - '" +
amount +
"' ELSE 'NEIN CASH' END END WHERE CardNumber = '" +
cardnumber +
"';",
function(err) {
if (err) {
console.log('You too poor');
console.log(err);
} else {
console.log('You got the cash');
}
}
);
}
module.exports = takeMoney;
运行此查询时,出现以下错误: 错误:ER_INVALID_GROUP_FUNC_USE:组功能的无效使用
查询以以下形式发布给我:
sql: 'UPDATE users.usercards SET Balance =
CASE WHEN type = \'visa\' AND balance>\'1000\'
THEN Balance - \'1000\'
ELSE
CASE WHEN type=\'mastercard\' AND SUM(balance - \'1000\')<\'-10000\'
THEN Balance - \'1000\'
ELSE \'NEIN CASH\'
END
END
WHERE CardNumber = \'123456\';'
预先,谢谢您的回复!
答案 0 :(得分:0)
因此,正如Gordon Linoff在评论中所述,我无法在更新查询中使用SUM。我只是将其包装在()中,所以效果很好。 TLDR;不要在更新查询中使用SUM。
connection.query(
"UPDATE users.usercards SET Balance = CASE WHEN type = 'visa' AND balance>'" +
amount +
"' THEN Balance - '" +
amount +
"' ELSE CASE WHEN type='mastercard' AND (balance - '" +
amount +
"')>'-10000' THEN Balance - '" +
amount +
"' ELSE 'NEIN CASH' END END WHERE CardNumber = '" +
cardnumber +
"';",
function(err) {
if (err) {
console.log('You too poor');
} else {
console.log('You got the cash');
}
}
);
}