У меня есть таблица 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/
РЕДАКТИРОВАТЬ: Спасибо за ответы! Моя дилемма: я позволю любому запустить
один запрос SELECT на "http://ccgames.db.94y.info/". Я хочу дать
им полезен доступ к моим данным, но не до такой степени, чтобы
создание сценариев или разрешение нескольких запросов с состоянием. Так что мне нужен один
SQL-запрос, который может делать накопление. Смотри также:
Существующее решение для совместного использования данных базы данных полезно, но безопасно?