Неправильное использование групповой функции Ошибка в MariaDB - Обновить запрос и SUM - PullRequest
0 голосов
/ 06 ноября 2018

Итак, я пытаюсь написать запрос на обновление, который либо обновляет средства пользователя, основываясь на том, есть ли у него виза или MasterCard. То, что я пытаюсь здесь заявить, и что я думаю, что является причиной ошибки, это обновить сумму, если текущий баланс и желаемая сумма вывода меньше, чем 10.000. Если это не так, и баланс визы становится меньше 0, я создаю преднамеренную ошибку, чтобы потом использовать ее, чтобы перенаправить пользователя на страницу с ошибкой (я знаю, что это не самый лучший способ сделать это на ПК). Вот как выглядит код:

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\';'

Заранее спасибо за ваш ответ!

1 Ответ

0 голосов
/ 06 ноября 2018

Так как Гордон Линофф заявил в комментарии, я не могу использовать 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');
      }
    }
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...