SQLITE3 更新案例 Node.js
SQLITE3 UPDATE CASE Node.js
我正在为 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']
});
如果上一场比赛与现在相差 24 小时(86400 秒),他会更新并设置计数器 1。
(CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer)
应该以秒为单位给出时差。这个对我有用。
完整的声明对我不起作用,它说:
"THEN" 附近的错误:语法错误
这种更新语句可以吗?如果是,我做错了什么?
我也在 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
同样的错误。
您在第一个 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"
我正在为 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']
});
如果上一场比赛与现在相差 24 小时(86400 秒),他会更新并设置计数器 1。
(CAST(strftime('%s', CURRENT_TIMESTAMP) as integer) - CAST(strftime('%s', last_game) as integer)
应该以秒为单位给出时差。这个对我有用。
完整的声明对我不起作用,它说: "THEN" 附近的错误:语法错误
这种更新语句可以吗?如果是,我做错了什么?
我也在 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
同样的错误。
您在第一个 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"