Javascript SQLITE3更新案例节点.js
我正在为node.js使用sqllite3 npm,并希望执行以下操作: 一个玩家可以玩这个游戏10次。24小时后,计数器重置,他可以再次玩10场游戏。我的想法是用一个更新的案例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))>
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"