Saya sarankan Anda tidak menyimpan cukup data di tabel Anda.
Seperti saat ini, Anda akan selalu perlu melihat setiap pembayaran sebelumnya untuk memastikan apakah pembayaran saat ini aktif atau menunggu aktivasi, kinerja tinggi, dan kueri yang lebih kompleks.
expires_at
yang dihitung kolom untuk payments
, yang dikerjakan pada penambahan pembayaran baru sebagai MAX(payments.expires_at) + INTERVAL service_plans.days DAYS
akan memungkinkan Anda menghitung jumlah hari yang tersisa dengan melihat satu baris saja.. dan apakah pengguna ada dalam rencana atau tidak.