У нас есть следующая таблица MySQL для поддержки пользовательских кредитов.Обновление самых старых строк на основе суммы столбца
id user credits expiry status
-----------------------------------------
1 A 1.2 somedatetime 0
2 A 4.4 somedatetime 0
3 A 5.0 somedatetime 0
4 B 1.0 somedatetime 0
5 B 2.4 somedatetime 0
6 C 7.8 somedatetime 0
Когда пользователь совершает покупку, мы вычитаем сумму из доступных кредитов. Чтобы быть справедливым для пользователя, кредиты с ближайшим сроком действия будут потребляться в первую очередь и так далее. Мы также обновим статус, чтобы отметить строку как потребляемую.
Например, если пользователь A совершает покупку в размере 2 долларов США, то из дебетовой карты 1 будет дебетоваться $ 1,2 и остаётся $ 0,8 от id 2 и так далее. Стол теперь будет выглядеть так:
id user credits expiry status
-----------------------------------------
1 A 0.0 somedatetime 1
2 A 3.6 somedatetime 1
3 A 5.0 somedatetime 0
4 B 1.0 somedatetime 0
5 B 2.4 somedatetime 0
6 C 7.8 somedatetime 0
До сих пор мы делали это с использованием грубой силы. Любое предложение идеи, как сделать это более эффективно в минимальном или одиночном запросе.
Обновление: так как кто-то спросил о нашем текущем подходе с грубой силой, он выполняет итерацию каждой строки от самого старого и обновления до тех пор, пока сумма покупки не будет покрыта, что очень неэффективно.
Thanks
Аналогичные вопросы были заданы. – Strawberry
@Strawberry: Отправьте ссылку пожалуйста –
Что вы подразумеваете под «подбором грубой силы»? – Shadow