, :
pass: (id, user_id, start_time, end_time, credit)
, :
update user join
(select user_id, sum(credit) as credit from pass
group by user_id where end_time <= now() and not flushed) b
set user.credit = max(user.credit - b.credit, 0)
where user.user_id = b.user_id
update pass set flushed = 1 where end_time <= now() and not flushed
end_time <= now(), , reset . , , , , ( ).
, - , X (30/60/90 ) , reset .
btw, , , ββ recurly chargify.