私は SQLite の初心者であり、SQL は私の強みではないため、助けが必要な場合があります。次のようなテーブルがあります。
--------------------------------------
try
--------------------------------------
id:INTEGER PRIMARY KEY AUTO_INCREMENT,
ip:VARCHAR(30),
number:INTEGER DEFAULT 10,
bdate:DATE
この種のテーブルは何のために必要ですか? 誤った資格情報エラーが 10 回発生した場合、その人を 24 時間「禁止」したいと考えています。属性番号を減らしたいだけです。そのため、ユーザーが初めて誤ったログ情報を入力した場合、デフォルトの番号として 10 を使用して新しいエントリを作成する必要があります。これは私がこれまでに持っているものです:
INSERT OR REPLACE INTO try(id, ip, number, bdate) VALUES(COALESCE((SELECT id FROM try WHERE ip="172.16.1.1"), NULL),"172.16.1.1" ,{DON'T KNOW WHAT TO FILL UP}, 06092013);
値のデクリメントを除いて、ほぼ完了です。私はそのようなことを考えました:
COALESCE((SELECT number FROM try WHERE ip="172.16.1.1"), 10)
NOT 0 (SQL の SET メソッドのように) の場合にのみ、選択の結果をデクリメントする方法はありますか? 0 の場合、新しいステートメントを実行する必要があります (テーブル ban ip に新しいエントリを追加するなど)。
編集:
減量で取れました。解決策については私の答えを見てください。
今度は if else ステートメントを使いたいと思います。私はグーグルでCASE WHENステートメントを見つけましたが、それを使用する方法がわかりません。私は何を間違っていますか?
SELECT number FROM try WHERE ip="172.16.1.1" AS number,
CASE WHEN number > 0
THEN
(INSERT OR REPLACE INTO try(id, ip, number, bdate) VALUES(COALESCE((SELECT id FROM try WHERE ip="172.16.1.1"), NULL),"172.16.1.1" ,COALESCE(number-1, 10), 06092013)
ELSE
{DO SOMETHING ELSE}
END;