Ich würde vermuten, dass Sie nicht genug Daten in Ihrer Tabelle gespeichert haben.
So wie es jetzt ist, müssen Sie sich immer jede vorherige Zahlung ansehen, um festzustellen, ob die aktuelle aktiv ist oder auf die Aktivierung wartet, ein großer Leistungseinbruch und eine komplexere Abfrage.
Ein berechneter expires_at
Spalte für payments
, die beim Hinzufügen einer neuen Zahlung als MAX(payments.expires_at) + INTERVAL service_plans.days DAYS
berechnet wird ermöglicht es Ihnen, die Anzahl der verbleibenden Tage zu ermitteln, indem Sie nur eine Zeile betrachten.. und ob ein Benutzer einen Plan hat oder nicht.