テーブルに十分なデータが保存されていないことをお勧めします。
現在のように、現在の支払いがアクティブであるか、アクティブ化を待機しているか、パフォーマンスが大幅に低下し、クエリがより複雑であるかどうかを確認するために、以前のすべての支払いを常に確認する必要があります。
計算されたexpires_at
payments
の列 、MAX(payments.expires_at) + INTERVAL service_plans.days DAYS
として新しい支払いを追加することで解決されます 1行だけを見て、残りの日数を計算することができます。ユーザーが計画に参加しているかどうかもわかります。