私は個人的にこれと類似の限界を追跡するためのトリガとしかしMysticXGするだろう。私がcronジョブを使用する理由は、ポイントのリセットを一元管理し、毎日 "UPDATE users SET limit = 5"を実行するだけで簡単に処理できるデータベースに負担をかけないことです。この例では、私は
user INT UNSIGNED AI PK
points INT UNSIGNED
dailyLimit TINYINT UNSIGNED DEFAULT 5
IF NEW.points > OLD.points THEN
IF NEW.points - OLD.points > OLD.dailyLimit THEN
SET NEW.points = OLD.points + OLD.dailyLimit;
END IF;
SET NEW.dailyLimit = OLD.dailyLimit + OLD.points - NEW.points;
END IF
これは、ユーザーがポイントの増加ならば、それはアップによって増加することを意味し、私は次のロジックでアップデートする前に発射するトリガーを追加フィールドを持つテーブルを作成しましたその日に残っているポイント数に加算します。彼らが限界を越えた場合、残っているポイントの数が増えるにつれて消滅する。ポイントが減少した場合、その制限は影響を受けません(これが望ましいかどうかは不明です)
制限をリセットするには、毎日この設定を実行するスクリプトを実行する必要があります。
UPDATE users SET dailyLimit = 5
ちょうどFYIここ
CREATE TRIGGER `checkLimit` BEFORE UPDATE ON `points` FOR EACH ROW
IF NEW.points > OLD.points THEN
IF NEW.points - OLD.points > OLD.dailyLimit THEN
SET NEW.points = OLD.points + OLD.dailyLimit;
END IF;
SET NEW.dailyLimit = OLD.dailyLimit + OLD.points - NEW.points;
END IF;
はいそれは私がやってますが、これは余分な不要バードンように感じているためにcronジョブを実行していると考えまさにそれだトリガーを作成するために完全なクエリです。もっと簡単な方法があるはずです。多くのウェブサイトでは、事前定義された数の失敗したリクエストの後にいつかログインフォームがブロックされるシステムを実装しています。私は同じ種類の論理がここで私の目的に役立つと信じています。 –
Hm ...まあ、別の方法はあなたのタイムスタンプとあなたのデータベースのポイントカウンターを持っているだろうと思います。たとえば、深夜にリセットする場合は、コードが新しい日になっているかどうかを確認することができます。その時点で、カウンタを新たにインクリメントする前にそのカウンタを自動的にリセットします。 – MysticXG