Обработка нескольких балансов с датами истечения срока действия в MySQL

Проблема : Рассмотрим банк, который выдает своим пользователям учетные записи с несколькими балансами с истечением срока действия, то есть сумма, зачисленная на ваш счет сегодня, истекает ровно через шесть месяцев. Допустим, вы получили 500 долларов сегодня (2 июня 2018 г.), этот баланс истечет (2 декабря 2018 г.). Теперь рассмотрим следующую таблицу сальдо клиента Tim.

id  balance createdAt     expiry
001     100     4th November 2017 4th May 2018
002     200     2nd January 2018  2nd July 2018
003     100     10th Feb 2018     10th August 2018

Если пользователь желает потратить 250 на какой-либо продукт сегодня (2 июня 2018 г.), эти 250 единиц следует поэтапно вычесть из всех доступных неистекших остатков, а просроченные строки должны быть очищены.

Поэтому таблица остатков после покупки должна быть

id  balance createdAt     expiry
003     50  10th Feb 2018 10th August 2018

решение, которое у меня есть

  1. получить все строки пользовательских балансов по возрастанию срока действия
  2. удалить все строки, срок действия которых истек
  3. перебирать другие строки
  4. если расходы - баланс в строке> 0, удалите строку и проведите расходы = баланс расходов в строке.
  5. если расходы - баланс в строке <= 0, то обновить строку установить баланс = баланс - траты

чего я ждуМожно ли реализовать вышеупомянутое решение более разумным способом.

заранее спасибо

Просто выберите все строки, срок действия которых еще не истек, или по порядку. Срок годности IOW> сегодня. Перебирайте их, обновляя баланс, пока вы не израсходуете потраченную сумму. Игнорируйте те строки, у которых истек срок годности.

Sloan Thrasher 02.06.2018 19:56

Вы можете попробовать это: перебирать каждую строку без сортировки или чего-то еще. Если истекает <сегодня, удалите, иначе вычтите расходы из баланса. Таким образом можно свести к минимуму операции, необходимые для сортировки. Вам не обязательно удалять все просроченные записи.

Vidor Vistrom 02.06.2018 20:27

@VidorVistrom, что было бы несправедливо по отношению к пользователям, которые предположительно должны иметь возможность сначала потратить баллы, ближайшие к истечению срока действия. Вы также почти наверняка не будете просто «удалять» просроченные строки ... необходимо учитывать исчезновение точек.

Michael - sqlbot 02.06.2018 23:17

@SrinivasSunil, если вы отслеживаете очки, просто уменьшая балансы, в конечном итоге у вас возникнет более серьезная проблема. Должна быть таблица транзакций, суммирующих остатки, иначе вы в конечном итоге обнаружите, что затрудняетесь объяснить, как некоторые из балансов достигли своего текущего состояния. Транзакции должны быть правдивыми, а остатки - неавторизованными.

Michael - sqlbot 02.06.2018 23:23

@ Michael-sqlbot, я также веду таблицу транзакций. Все, что я искал, - это лучший способ организовать и работать с этими истекающими остатками. Спасибо

Whitewolf 03.06.2018 04:05
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
5
91
0

Другие вопросы по теме