1

私は 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;
4

2 に答える 2

0

私は自分で減分してそれを得ました:

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((SELECT number FROM try WHERE ip="172.16.1.1")-1, 10), 06092013;
于 2013-09-06T09:20:30.537 に答える