Транзакция MySQL — необходима помощь с логикой операций

Добрый день. Пока не получается составить лоигку работы с MySQL, прошу помощи.
Пишу онлайн игру, в ней есть интернет магазин внутренних артефактов.

Есть таблица InnoDB с продажей например железа в кг (слева лучшая цена, справа количество товаров)

price | amount
30 | 900
32 | 1400
33 | 900
33 | 930
34 | 2000
.... [ и еще несколько тысяч позиций ]

Мне надо реализовать транзакцию из нескольких mysql операций, суть:
Игрок заполняет форму - хочу купить 950 кг железа по максимальной цене 32 рубля.

Дальше как? помогите составить логику поочередно как выполнить эту операцию:

списание 950 кг чтобы в итоге стало так:

price | amount
32 | 1350
33 | 900
33 | 930
34 | 2000
.... [ и еще несколько тысяч позиций ]

и чтобы первым двум продавцам сделать выплату и т.д.

Распишите пожалуйста логику и последовательность операций.
  • Вопрос задан
  • 2528 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Добавляете в таблицу поле `sold`, по умолчанию 0.
В цикле выдаёте запросы:
UPDATE `table` SET `sold` = 1 WHERE `sold` = 0 AND `price` <= {$maxprice} AND @id := `id`;
SELECT * FROM `table` WHERE `id` = @id;

Первый запрос установит признак "продано" и запишет id строки в переменную, второй получит изменённую строку. Затем определяете объём покупки (минимальное из объёма лота и остатка желаемого количества), переводите оплату. Если лот продан полностью, а заявка ещё не выполнена, то повторяете цикл, если нет - то уменьшаете объём лота и сбрасываете признак `sold` в 0.
Ответ написан
Комментировать
mgyk
@mgyk
Тут одним запросом не получится сделать. Просто в коде приложения открываете транзакцию и выбираете данные с SELECT ... FOR UPDATE. Потом обновляете так же по одной записи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы