Это не совсем понятно для меня, но звучит так, как будто вы говорите:
Если paymentplan
повторяется, то клиент платит amount
периодически (ежемесячно?) в течение 6 или 12 месяцев.
Если paymentplan
один раз, то клиент платит amount
один раз.
Я предлагаю вам третью таблицу:
Платежи (id, packageId, сумма, duedate, paymentdate)
При создании пакета также создайте 1, 6 или 12 строк в платежах. Затем вы можете указать сумму, подлежащую оплате в каждом последующем взносе. Дедедат - это дата, за которую он должен. Дата платежа изначально NULL, потому что клиент еще не заплатил. Когда клиент платит, установите в качестве даты платежа дату оплаты (это может быть до или после даты).
Это позволяет найти платежи, которые не были оплачены и просрочены: *
SELECT ... FROM Payments WHERE paymentdate IS NULL AND duedate < NOW()