Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SQLITE3更新案例节点.js_Javascript_Node.js_Sqlite_Sql Update - Fatal编程技术网

Javascript SQLITE3更新案例节点.js

Javascript SQLITE3更新案例节点.js,javascript,node.js,sqlite,sql-update,Javascript,Node.js,Sqlite,Sql Update,我正在为node.js使用sqllite3 npm,并希望执行以下操作: 一个玩家可以玩这个游戏10次。24小时后,计数器重置,他可以再次玩10场游戏。我的想法是用一个更新的案例 db.run("UPDATE user_sessions SET games_played = CASE WHEN((CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer))>

我正在为node.js使用sqllite3 npm,并希望执行以下操作:

一个玩家可以玩这个游戏10次。24小时后,计数器重置,他可以再次玩10场游戏。我的想法是用一个更新的案例

 db.run("UPDATE user_sessions SET games_played = CASE WHEN((CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer))>86400 THEN "1" ELSE  ?1, last_game = CURRENT_TIMESTAMP WHERE ip_address = ?2 AND user_agent = ?3", {
        1:gamesPlayed,
        2:handshake.address,
        3:handshake.headers['user-agent']
    });
他更新并设置计数器1,如果上一场比赛和现在之间有24小时的差异(86400秒)

应该以秒为单位给出时间差。它对我有用

完整的声明对我不起作用,它说: “THEN”附近出错:语法错误

这种update语句可能吗?如果是,我做错了什么

我还在sqlite浏览器命令行中尝试了这一点:

UPDATE user_sessions SET games_played = CASE WHEN(((CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer))>86400) THEN 1 ELSE  5, last_game = CURRENT_TIMESTAMP 

相同错误。

您在第一次
转换之前有一个多余的
),并且缺少
case
表达式的
end
子句:

UPDATE user_sessions SET games_played = CASE WHEN(CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer))>86400 THEN "1" ELSE  ?1 END, last_game = CURRENT_TIMESTAMP WHERE ip_address = ?2 AND user_agent = ?3"

你需要结束你的
案例…然后…否则…结束
投影(用一个
结束
)还有一个括号
缺失或一个
之后额外的
,当
像一个符咒一样工作时谢谢!仍然缺失
案例中的
结束
,如@StuartLC所述
UPDATE user_sessions SET games_played = CASE WHEN(CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer))>86400 THEN "1" ELSE  ?1 END, last_game = CURRENT_TIMESTAMP WHERE ip_address = ?2 AND user_agent = ?3"