У меня есть таблица Users, которая содержит уникальный идентификатор, целое число 'econ' и некоторые другие не относящиеся к делу данные. Я пытаюсь создать оператор SQL для простой реализации азартных игр. У меня есть доступ к идентификатору пользователя, сумме ставки и сумме, которую они потенциально могут выиграть. Мне нужно убедиться, что у пользователя в настоящее время больше денег, чем в общей ставке, и, если это так, ОБНОВИТЬ строку в Users.econ + выигрыши. (Если пользователь проиграл ставку, я просто использую отрицательное число в качестве значения выигрыша). Я могу сделать это с парой отдельных заявлений, но я бы предпочел использовать одно, чтобы мне не приходилось иметь дело с транзакциями.
Модель:
Пользователь: id (varchar), econ (integer), другие
Текущая реализация:
- SQL: ВЫБРАТЬ econ от пользователей WHERE id = 'xyz'
- Логика: если(econ> bet) newEcon = econ + winnings, иначе выкидывается ошибка
- SQL: ОБНОВЛЕНИЕ пользователей SET econ = newEcon WHERE id = 'xyz'
Желаемый результат:
Пример 1:
Модель пользователя: id: 10, econ: 300
Запрос SQL: id: 10, ставка: 200, выигрыш: 300
Результат: Пользователь: id: 10, econ: 600
Пример 2:
Модель пользователя: id: 5, econ: 50
SQL-запрос: id: 5, ставка: 100, выигрыш: 500
Результат: Пользователь: id: 5, econ: 50 (без изменений)
Пример 3:
Модель пользователя: id: 12, econ: 200
Запрос SQL: id: 12, ставка: 100,выигрыши: -100
Результат: Пользователь: id: 12, econ: 100