Kudos! I read a lot of replies to various threads hoping to learn something, and this thread was a double bonus.
Never new of the 'events' feature either. But I think this solution below is very elegant and is one of those "so obvious it makes me feel retarded" answers. ;-) Personally, I would have erroneously done the crontab way and never given it a second thought. This method opens my eyes to a new "outside the box" way of thinking. Even more ironic is that I used to code 3D video games for 3.5 years and this is EXACTLY how I would have had to implement something like this in a game. Even moving an object from a to b requires delta times. I took it for granted in that scenario. Using servers and databases, I take for granted crontabs and external scripts. I just found it very enlightening that this example merges those two worlds. Thank you Douglas (and Dan). daevid.com > -----Original Message----- > From: Douglas Sims [mailto:[EMAIL PROTECTED] > Sent: Friday, June 02, 2006 10:42 AM > To: Miles Thompson > Cc: mysql@lists.mysql.com > Subject: Re: Automatically add +1 every 30mins > > > You probably don't want to do it with events or as a cron job. As > it sounds from your description the amount of gold is a function of > time, perhaps time since they started playing or joined the game. > Thus, instead of updating every 30 minutes, when you are selecting > the current amount of gold, just select it as a function of the time > since they were online or signed up for the game. > > You can use a time difference function, either "TIMEDIFF" or > subtract > the UNIX_TIMESTAMP value of the start date/time from the > UNIX_TIMESTAMP() function of the curent date/time, and then just > divide appropriately. > > More info about MySQL date/time functions: http://dev.mysql.com/doc/ > refman/5.0/en/date-and-time-functions.html > > Example: To get the number of 30-minute increments since some date, > > mysql> SELECT ROUND((UNIX_TIMESTAMP()-UNIX_TIMESTAMP('2006-05-30 > 3:45'))/(60*30)); > +------------------------------------------------------------- > --------+ > | ROUND((UNIX_TIMESTAMP()-UNIX_TIMESTAMP('2006-05-30 > 3:45'))/(60*30)) | > +------------------------------------------------------------- > --------+ > | 162 > | > +------------------------------------------------------------- > --------+ > 1 row in set (0.00 sec) > > Here is a reference to the MySQL documentation on date and time > functions, which is really good: http://dev.mysql.com/doc/refman/5.0/ > en/date-and-time-functions.html > > Good luck! > > > Douglas Sims > [EMAIL PROTECTED] > > > > On Jun 2, 2006, at 7:56 AM, Miles Thompson wrote: > > > > > Dan, > > > > Did not know about events in MySQL. That's a terrific feature. > > > > Miles > > > > At 09:44 AM 6/2/2006, Dan Buettner wrote: > > > >> Alex, as Miles noted, this could easily be accomplished with an > >> external cron event. Doesn't have to be written in an external > >> language like PHP or perl, even - could be a self-contained > >> crontab entry a la: > >> > >> 0,30 * * * * /path/to/mysql -u user -psecret database_name -e > >> "update table_name set gold = gold + 1" > /dev/null > >> > >> > >> To accomplish this within MySQL, one option might be 5.1's events: > >> > >> http://dev.mysql.com/doc/refman/5.1/en/events.html > >> http://dev.mysql.com/doc/refman/5.1/en/create-event.html > >> > >> > >> Hope this helps, > >> Dan > >> > >> > >> > >> Alex Major wrote: > >>> Hi there. I've posted this up on both this list, and the > php list > >>> as I'm not sure > >>> whether this is something that I'd need to do with the > php or mysql. > >>> Basically, I am making an add-on to my small website which is a > >>> mini online > >>> game. Every user will have gold, and every 30mins I'd like their > >>> amount of > >>> gold to go up by 1 (or say a variable say $goldupdateamount). > >>> I'd like to know which would be the best way of doing this, and > >>> if there is > >>> a command in mysql which would achieve this. > >>> Regards, Alex. > >>> > >> > >> -- > >> MySQL General Mailing List > >> For list archives: http://lists.mysql.com/mysql > >> To unsubscribe: http://lists.mysql.com/mysql? > >> [EMAIL PROTECTED] > >> > >> > > > > > > -- > > No virus found in this outgoing message. > > Checked by AVG Anti-Virus. > > Version: 7.1.394 / Virus Database: 268.8.1/354 - Release Date: > > 6/1/2006 > > > > > > > > -- > > MySQL General Mailing List > > For list archives: http://lists.mysql.com/mysql > > To unsubscribe: > http://lists.mysql.com/[EMAIL PROTECTED] > > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: > http://lists.mysql.com/[EMAIL PROTECTED] > > -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]