私は、定期的な請求書の作成に関係するいくつかの php コードに取り組んでいます。ロジックを考えるのに助けが必要です。最終的には、一種の Insert/Select ステートメントになると思います。ここで最終的に生成される php コードは、夜間の cron で実行されます。
まず、参照フレームとしてテーブル アイテムのいくつかを示し、それらが何をするかについて少し説明します。このテーブルは Invoice と呼ばれ、それに関連付けられた他のテーブルがありますが、この 1 つのテーブルのロジックを理解できれば、他のテーブルにも適用できると思います。
ID = これは、自動インクリメントされる主キーであり、たまたま請求書番号でもあります。
recurring = これは、請求書が 1 回限りか定期的かを示します。O=1回、M=毎月など
recurred = これは挿入時に N に設定され、テーブルに作成される次の定期的な請求書がこの請求書に基づいているかどうかを確認するために使用しているロジックです。新しい定期請求書がテーブルに挿入されると、これは Y に変更されるため、cron ジョブによって再度処理されません。
date = これは、請求書が挿入/作成された日付です。たとえば、請求書が作成された日付が今月の 15 日の場合、次に作成される請求書は翌月の 15 日になります。基本的に M は月次を表します。ただし、31日の作成日をどうするかはまだわかりませんが、翌月には30日しかないため、ここで助けを借りることができます.
だからここに私の論理があります。まず、クエリを実行して、O ではなく繰り返し = N であるすべての行を検索します。
$result = mysql_query("SELECT * FROM invoice WHERE recurring != 'O' and recurred
= 'N'") または die(mysql_error());
次に、毎月のM、四半期ごとのQなど、さまざまな種類の繰り返しに取り組みます.
if recurring = M
if todays date day = 'date' day
copy line item into a new row with the following changes: new ID, todays date, and mark the recurred to N for the new insert (will mark the old one Y)
明らかに、それは実際のコードではなく、私が考えていることです。
したがって、私の質問は、1.) 変更された変数を処理するための挿入選択ステートメントを作成する方法と、2.) ある月の 31 日に請求書が作成され、翌月に 30 日しかない場合の日付の処理方法 (または28)。