2012-03-22 3 views
2

У меня есть таблица «reward_points» со структурой, подобной «id», «user_id», «points», «datetime_gained».Mysql постепенно обновляет строки с одним запросом

Каждый user_id может иметь несколько строк с количеством очков вознаграждения. Общая сумма очков, которые они могут потратить, представляет собой сумму всех строк (на которые ссылается их user_id.

Когда пользователь тратит очки, мне нужно вычитать очки от их общего начала с самого старого (используя date time_gained) и постепенно использовать следующий старейший, пока не будут выделены все оставшиеся очки.

Это, очевидно, довольно сложно сделать на языке сценариев, но я пытаюсь решить, если это можно сделать используя чистый MySQL?

ответ

3

Вместо фактического вычитания точек, учитывая вашу текущую структуру стиля транзакции, было бы лучше вставить новые строки с отрицательными значениями точки? Тогда a SUM предоставит вам новый вычитаемый баланс.

Вычитая прямо из исходных строк, вы фактически аннулируете эти данные. Если пользователь набрал 5 очков на 3/1, то сегодня потратил 2 балла, в базе данных теперь говорится, что пользователь набрал 3 очка на 3/1 (что неверно). Добавление новых строк показало бы, что пользователь набрал 5 очков на 3/1, а затем потерял 2 балла сегодня.

+1

Это точно та же идея, что и у меня .. Ты был слишком быстр :) – DonCallisto

+0

Спасибо за быстрый ответ. Ваши предложения, вероятно, лучший способ пойти. – Alistair

Смежные вопросы