チェックイン機(jī)能のあるプラットフォームを持っています。このユーザーがこのプラットフォームに連続して何日間チェックインしたかを判斷し、さまざまなポイントを與える必要があります。
たとえば、今日は 4 月 26 日ですが、4 月 15 日から毎日サインインしています。つまり、4 月 13 日にはサインインしましたが、4 月 14 日にはサインインしませんでした。
mysql ステートメントの書き方
通常、連続サインインの日數(shù)が保存されない場(chǎng)合、以前に行った方法の 1 つは、サインインをタイムスタンプとともに保存してから、サインインのタイムスタンプを取得することです。 1 か月分を取得し (サインインがいっぱいになった月の場(chǎng)合は、前月のものを取得します)、PHP で日數(shù)をループして計(jì)算します。その後、この方法では時(shí)間がかかるため、チェックイン日を個(gè)別に記録しました
データベース設(shè)計(jì)の問(wèn)題
連続した日數(shù)をカウントする必要があるため、毎日 1 つの項(xiàng)目を記録することは不可能です (銀行が任意の日數(shù)分のユーザーの殘高を記録していることを想像してください)
會(huì)計(jì)方法は年次累積アルゴリズムと呼ばれます。つまり、ある時(shí)點(diǎn)を別の時(shí)點(diǎn)まで記録します。ある時(shí)點(diǎn)の殘高は変更されません (継続的)。
テーブルのデザインは、おおよそ次のとおりです。
終了時(shí)間 - 開(kāi)始時(shí)間 = 日數(shù)。ポイントの変換は稅金と同じで、ボーナスを計(jì)算するだけです。
ビジネス ルールでは、連続 x 日間に付與されるポイント數(shù)に上限を設(shè)ける必要があります。たとえば、連続 20 日以上の場(chǎng)合に付與されるポイント數(shù)はいくらですか。
次に、この x を覚えておきましょう。db select * from tb where uid = 10086 order by dt desc limit x
その後、プログラムの連続日數(shù)の最大値を判斷し、対応するスコアを加算します。