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