如何在第一次更新 'X' 分钟后更改字段值
How to change the field value after 'X' minutes of the first update
我想在第一次更新 10 分钟后更新我的值
例如,我发送了这个请求:
UPDATE client set lockclient = 1 WHERE id = 100
我想在10分钟后发送另一个请求,如下:
UPDATE client set lockclient = 0 WHERE id = 100
我在 google 上找到了这个例子:
DELIMITER $$
CREATE EVENT deactivation
ON SCHEDULE EVERY 10 MINUTE STARTS CURRENT_TIMESTAMP
DO
BEGIN
UPDATE tbl SET tbl.active = FALSE WHERE id =10
END;
$$;
但我只想在前 10 分钟更新,而不是每 10 分钟更新一次。
我可以使用 php、mysql 或 javascript 吗?
第一个选项:
有两种方法。如果你想要短路径,你可以通过 sql.
来完成
//Create an event called my_update_event
DELIMITER $$
DROP EVENT IF EXISTS my_update_event$$
CREATE EVENT my_update_event
ON SCHEDULE
AT NOW() + INTERVAL 10 MINUTE
ON COMPLETION NOT PRESERVE
ENABLE
DO BEGIN
UPDATE tbl SET tbl.active = FALSE WHERE id =10;
END$$
第二个选项:
我不确定你所说的只在前 10 分钟更新是什么意思?您还可以使用带有 php/mysql 的 cron 来进行更新。你可以设置一个 cron 来做任何事情,在这个例子中 运行 每 10 分钟
*/10 * * * * /path/to/script/update.php
您可以尝试使用 Ajax 和 setTimeout()
javascript 函数,如下所示:
<div id="id_test"></div>
<SCRIPT language=javascript>
var update1 = false
update2 = false;
function run_ajax(lockclient){
// write your call ajax function with lockclient parameter
// this is an example to test the principle
var dt=new Date()
document.getElementById("id_test").innerHTML = dt.getHours()+":"+dt.getMinutes()+":"+dt.getSeconds() + "<br>lockclient =" + lockclient;
}
function Timer() {
// if you have already called 2 times the server, you leave
if (update2 && update1)
return;
// if you have already called 1 time the server, you call it a second time with '0' as lockclient parameter
if (!update2 && update1){
update2 = true;
run_ajax(0)
}
// If you did not call the server, you call it a first time with '1' as lockclient parameter
if (!update1){
update1 = true;
run_ajax(1)
}
//setTimeout("Timer()",600000); -> 600000 = 10 minutes
setTimeout("Timer()",2000); // 2s to test
}
Timer();
</SCRIPT>
我想在第一次更新 10 分钟后更新我的值
例如,我发送了这个请求:
UPDATE client set lockclient = 1 WHERE id = 100
我想在10分钟后发送另一个请求,如下:
UPDATE client set lockclient = 0 WHERE id = 100
我在 google 上找到了这个例子:
DELIMITER $$
CREATE EVENT deactivation
ON SCHEDULE EVERY 10 MINUTE STARTS CURRENT_TIMESTAMP
DO
BEGIN
UPDATE tbl SET tbl.active = FALSE WHERE id =10
END;
$$;
但我只想在前 10 分钟更新,而不是每 10 分钟更新一次。 我可以使用 php、mysql 或 javascript 吗?
第一个选项:
有两种方法。如果你想要短路径,你可以通过 sql.
来完成//Create an event called my_update_event
DELIMITER $$
DROP EVENT IF EXISTS my_update_event$$
CREATE EVENT my_update_event
ON SCHEDULE
AT NOW() + INTERVAL 10 MINUTE
ON COMPLETION NOT PRESERVE
ENABLE
DO BEGIN
UPDATE tbl SET tbl.active = FALSE WHERE id =10;
END$$
第二个选项:
我不确定你所说的只在前 10 分钟更新是什么意思?您还可以使用带有 php/mysql 的 cron 来进行更新。你可以设置一个 cron 来做任何事情,在这个例子中 运行 每 10 分钟
*/10 * * * * /path/to/script/update.php
您可以尝试使用 Ajax 和 setTimeout()
javascript 函数,如下所示:
<div id="id_test"></div>
<SCRIPT language=javascript>
var update1 = false
update2 = false;
function run_ajax(lockclient){
// write your call ajax function with lockclient parameter
// this is an example to test the principle
var dt=new Date()
document.getElementById("id_test").innerHTML = dt.getHours()+":"+dt.getMinutes()+":"+dt.getSeconds() + "<br>lockclient =" + lockclient;
}
function Timer() {
// if you have already called 2 times the server, you leave
if (update2 && update1)
return;
// if you have already called 1 time the server, you call it a second time with '0' as lockclient parameter
if (!update2 && update1){
update2 = true;
run_ajax(0)
}
// If you did not call the server, you call it a first time with '1' as lockclient parameter
if (!update1){
update1 = true;
run_ajax(1)
}
//setTimeout("Timer()",600000); -> 600000 = 10 minutes
setTimeout("Timer()",2000); // 2s to test
}
Timer();
</SCRIPT>