首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLITE3更新案例Node.js

SQLITE3更新案例Node.js
EN

Stack Overflow用户
提问于 2015-06-12 11:52:08
回答 1查看 589关注 0票数 3

我正在为sqllite3的node.js使用npm,我想做以下工作:

一个玩家可以玩10次游戏。24小时后,柜台重置,他可以再次打10场比赛。我的想法是用一个更新的箱子来做。

代码语言:javascript
复制
 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秒)。

代码语言:javascript
复制
(CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer)

应该以秒为单位给出时差。对我来说很管用。

这个完整的语句对我不起作用,它说:“那”语法错误附近的错误

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

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

代码语言:javascript
复制
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 

同样的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 11:58:15

在第一个(之前有一个冗余的cast,并且缺少了case表达式的end子句:

代码语言:javascript
复制
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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30802411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档