Jeg vil foreslå, at du ikke helt har gemt nok data i din tabel.
Som det er nu, vil du altid skulle se på hver tidligere betaling for at fastslå, om den nuværende er aktiv eller afventer aktivering, et stort præstationshit og mere kompleks forespørgsel.
En beregnet expires_at
kolonne for payments
, som er udarbejdet ved tilføjelse af en ny betaling som MAX(payments.expires_at) + INTERVAL service_plans.days DAYS
giver dig mulighed for at beregne antallet af resterende dage ved kun at se på én række.. og om en bruger er på en plan eller ej.