我正在为sqllite3的node.js使用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秒)。
(CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer)应该以秒为单位给出时差。对我来说很管用。
这个完整的语句对我不起作用,它说:“那”语法错误附近的错误
这种更新语句可能吗?如果是,我做错了什么?
我还在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 同样的错误。
发布于 2015-06-12 11:58:15
在第一个(之前有一个冗余的cast,并且缺少了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"https://stackoverflow.com/questions/30802411
复制相似问题