我有一个sqlite3表,告诉我什么时候在游戏中获得/失分。样本/查询结果:
SELECT time,p2 FROM events WHERE p1='barrycarter' AND action='points'
ORDER BY time;
1280622305|-22
1280625580|-9
1280627919|20
1280688964|21
1280694395|-11
1280698006|28
1280705461|-14
1280706788|-13
[etc]
我现在想要我的跑步点。鉴于我开始有1000点, 这是一种方法。
SELECT DISTINCT(time), (SELECT
1000+SUM(p2) FROM events e WHERE p1='barrycarter' AND action='points'
AND e.time <= e2.time) AS points FROM events e2 WHERE p1='barrycarter'
AND action='points' ORDER BY time
但这非常低效。写这个更好的方法是什么?
MySQL有@variables所以你可以这样做:
SELECT time, @tot := @tot+points ...
但是我正在使用sqlite3,而且上面不是ANSI标准SQL。
有关数据库的更多信息,如果有人需要它:http://ccgames.db.94y.info/
编辑:谢谢你的回答!我的困境:我让任何人都跑了 对“http://ccgames.db.94y.info/”的单 SELECT查询。我想给 他们有用的访问我的数据,但没有到允许的程度 脚本或允许多个状态查询。所以我需要一个 可以做累积的SQL查询。另见:答案 0 :(得分:1)
SQLite意味着是一个小型嵌入式数据库。鉴于该定义,找到许多限制并不是不合理的。手头的任务不能单独使用SQLite来解决,或者你发现它会非常慢。您编写的查询是一个三角形交叉连接,它不会缩放,或者更确切地说,会缩放。
解决问题的最有效方法是通过使用SQLite的程序,例如如果您在HTML5中使用Web SQL,则可以轻松地在JavaScript中累积。
答案 1 :(得分:1)
sqlite mailing list中有关于此问题的讨论。
您的两个选项是: