im redesigning a mmorpg game and im in a bit of a pickle on this one.
i have the following code on the daily cron file.
dbn("update mygame set event = '11' where event = '10'");
now...
this file runs once a day. i would like to update the database in a way such
day 1 ----- event =10,
day 2 ----- event =11,
day 3 ----- event =12 ...etc,
in other words,
once the event is set it will automatically update itself till it dies out.
Hence day 1
dbn("update mygame set event = '10' where event = '9'");
day 2
dbn("update mygame set event = '11' where event = '10'");
so on and so forth.
Any ideas?
Thank you in advance for reading.
1) Make your event column a numeric type like an int, not a string containing a number
2) dbn("UPDATE mygame SET event = event + 1")
However, you probably don't need this column at all. If all it does is count days, then store the start date and COMPUTE the number of days elapsed wherever you're using that value. You won't have to run any query each day.
UPDATE mygame
SET event=event+1
WHERE <useful condition>
Related
I have written an Event Scheduler in MySQL I don't why it's not working.
I would like to set the reserved = 0. the event should run every midnight at 00:01:00 european time. when the expiration date (exp_date) is less then current date time here is my script.
CREATE EVENT IF NOT EXISTS disable_reserved_value_of_prospect
ON SCHEDULE
EVERY 1 DAY
STARTS '2022-03-30 00:01:00'
ON COMPLETION PRESERVE
ENABLE
DO
UPDATE prospect
SET reserved = 0
WHERE exp_date < CURRENT_TIMESTAMP;
But my script doesn't work I don't know why ?
Can we use any if condition inside event script?
Thanks in advance
ON COMPLETION PRESERVE is for one-time event only,so you don't need it in your recurring event. Try modifying the code like below:
delimiter //
drop event if exists disable_reserved_value_of_prospect //
CREATE EVENT disable_reserved_value_of_prospect
ON SCHEDULE
EVERY 1 DAY
STARTS '2022-03-30 00:01:00' DO
BEGIN
UPDATE prospect
SET reserved = 0
WHERE exp_date < CURRENT_TIMESTAMP;
END //
To verify, we can reduce the 1st kick-in time by using EVERY 1 minute STARTS now(). If nothing happens, there is probably something wrong with the UPDATE statement. Substitute it with a TEST statement to insert a line into a test table or something.
I want to give my users bonus every day at 00:01 AM, so i am looking for an automatic trigger in mysql to update Bonus in users.
UPDATE users SET bonus = bonus + 10
How can i do this ?
Thank you
MySQL has a built-in scheduler that can be used to execute tasks according to a given schedule.
Here is how to create a scheduled event for your use case:
create event grant_user_bonus_daily
on schedule every 1 day
starts current_date + interval 1 day + interval 1 minute -- starts tomorrow at 00:01
do
update users set bonus = bonus + 10;
SET GLOBAL event_scheduler = ON;
Example:
CREATE EVENT test_event_02
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE
DO
INSERT INTO messages(message,created_at)
VALUES('Test MySQL Event 2',NOW());
Full tutorial here
Official MySQL link
For example, I am creating a student management system and I want to increase the student standard after every year. If student is admitted in 1st standard then next year he would be in 2nd after that 3rd and so on.. Please help!
you can use MySQL EVENT like
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
UPDATE `student` SET `standard` = `standard` + 1
WHERE some_ID_Column = value;
Set up a cron job that runs nightly and run a stored procedure that checks if the students have reached the condition for the next standard and if they have update the records.
I am working a system in PHP. In my MySQL have a table borrow. Inside borrow is borrow_status a varchar and borrow_remain which is an int value. When the user click the submit button. The query will run something like
INSERT INTO `borrow`( `borrow_status`,`borrow_remain`) VALUES ('Borrowing',3)
How can I decrement the borrow_remain value per 24 hours then UPDATE the borrow_status to Finish when it reaches zero?
EDIT: I also have a book table, that have a book_quantity, my only concern is that the book_quantity must increment if the borrow_status is updated to Finish.
You can implement the above scenario following the three steps given below :
1) First you have to enable Mysql event scheduler.
SET GLOBAL event_scheduler = 1;
2) Create a procedure in mysql that will do the borrow status update related functionalities.
delimiter //
CREATE PROCEDURE UBS()
BEGIN
UPDATE borrow set borrow_remain = borrow_remain - 1
WHERE borrow_status='borrowing';
UPDATE borrow SET borrow_status = 'finished'
WHERE borrow_remain=0;
END //
delimiter ;
3) Create an event which will be scheduled in 24 hours interval.
CREATE
EVENT UBSEvent
ON SCHEDULE EVERY 24 HOUR STARTS '2015-03-04 00:00:00'
ON COMPLETION PRESERVE
ENABLE
DO
CALL UBS();
Note :
UBS is the procedure name.[ UBS = Update Borrow Status (just a
relevant abbreviation ]
The event will start from tomorrow (4 March 2015) at 12:00 AM
Have a nice day!
EDIT: To increment book_count in book table whenever a borrow_status in borrow table gets updated to 'finished' you need a trigger.
Suppose you have a book table where the count of the book is denoted by book_count; Then the following trigger will do what you want.
DELIMITER $$
CREATE TRIGGER IncBookCount AFTER UPDATE ON borrow
FOR EACH ROW
BEGIN
IF NEW.borrow_status = 'finished' THEN
UPDATE book SET book_count = book_count+1;
END IF;
END $$
DELIMITER;
SUGGESTION : You need to improve your database design. Otherwise you might get more troubles in designing a complex architecture in future. Stay well!
Have you look at Events in mySQL? You can create an event and set it to run on a particular schedule. That might be the ticket for your problem!
You need to have mysql version 5.5 to use event. May be your desired event looks like this:
CREATE EVENT update_borrow
ON SCHEDULE EVERY 24 HOUR
STARTS CURRENT_TIMESTAMP
DO
BEGIN
UPDATE borrow SET borrow_remain = borrow_remain - 1 WHERE borrow_remain > 0;
UPDATE borrow SET borrow_status = 'FINISH' WHERE borrow_remain = 0;
END
You could also set a cronjob that executes a piece of code to decrement "borrow_remain" and updates "borrow_status" accordingly. If your hosting has cPanel it's pretty easy: https://documentation.cpanel.net/display/ALD/Cron+Jobs
Is there any way or script that allows to auto update the column in my database everyday at midnight 12.For eg I have a column 'x' ,currently value in certain row under column 'x' is say 10, What I want is to reinitialize that value to 0 as the clock strikes 00:00:00.Is there any way to do this ?
My database details : mysql in phpmyadmin.
Scripts I am aware of : javascripts or php.
You can use MySQL's event scheduler
CREATE EVENT update_status ON SCHEDULE EVERY 1 DAY STARTS '2013-11-02 00:00:00' DO
UPDATE your_table
SET x = 0
In order to make the event scheduler run you can add this in my.cnf:
[mysqld]
...
event_scheduler=ON
Read this for more info http://dev.mysql.com/doc/refman/5.1/en/create-event.html
You seriously need to look on CRON jobs. This CRON Job runs every midnight.
0 0 * * * php /var/www/yourscript.php
yourscript.php
<?php
//... make conn to db
//make use of query something like this
mysqli_query("UPDATE yourtable SET yourcolumn = 0");
CREATE EVENT event_scheduler_x
ON SCHEDULE EVERY 1 DAY
STARTS '2013-11-04 00:00:00'
DO UPDATE tbl
SET x = 0;