我是 SQLite 的新手,而且 SQL 也不是我的强项,所以我需要帮助。我有一张这样的桌子:
--------------------------------------
try
--------------------------------------
id:INTEGER PRIMARY KEY AUTO_INCREMENT,
ip:VARCHAR(30),
number:INTEGER DEFAULT 10,
bdate:DATE
我需要这种桌子做什么?我想“禁止”一个人 24 小时,如果他得到 10 次虚假凭证错误。我只想减少属性号。因此,如果此人第一次输入错误的日志信息,则应创建一个新条目,默认数字为 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)
知道如何仅当它不是 0 时才从选择中减少结果(如 SQL 中的 SET 方法)?如果为 0,则应执行新语句(如向表禁止 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;