晚上好,
我有一个表,我存储一个类型为:datetime的元素, 我将通过php上的脚本在此元素中插入日期。
当达到日期时,我想增加" datepast"来自table2, 我们可以通过比较" name"从table1到" person_name"来自table2。
现在问题是如何触发一个sql脚本为我做这个工作,如果它是实时的话会很棒。
已经感谢了,
create table if not exists table1 ( name varchar(64) NOT NULL,
finishtime DATETIME, id_table1 int NOT NULL AUTO_INCREMENT, primary key ( id_table1 ));create table if not exists table2 ( person_name varchar(64) NOT NULL,
datepast int, id_table1 int NOT NULL AUTO_INCREMENT, primary key ( id_table1 ));
答案 0 :(得分:0)
您可以使用MySQL事件或Cronjob。这不是实时的,但它可以接近。
由于您的发布未完成且缺少table2,我只能举例说明如何设置事件。在DO BEGIN and END $$
内,您可以添加MySQL查询以更新datepast。
DELIMITER $$
CREATE
EVENT `increase_date_past`
ON SCHEDULE EVERY 30 SECOND
DO BEGIN
{{READ DATE AND UPDATE TABLE2}}
END $$
DELIMITER ;
默认情况下不会激活事件,您必须转到
In /etc/mysql/my.cnf
并在[mysqld]
标记内放置一行来激活事件。
[mysqld]
event_scheduler=1
然后sudo service mysql restart
答案 1 :(得分:0)
Cronjobs和MySQL事件可以很好地处理这些事情。但是你在那里放置的查询必须设置为幂等的 - 也就是说,必须设置它们,这样如果你不止一次运行它们,它们就像运行它们一样具有相同的效果。否则你将有一个脆弱的解决方案。
当您根据finishtime
等过期时间处理数据时,尝试使用查询或视图通常是个好主意,而不是更新。
例如,您可以创建此视图
CREATE OR REPLACE VIEW table2 AS
SELECT name AS person_name
COUNT(*) AS datepast
FROM table1
WHERE datepast <= NOW()
GROUP BY name
然后,SELECT * FROM table2
将生成与SELECT person_name, datepast FROM table2
可能生成的结果集相同的结果集。但SELECT结果集将始终精确准确。
等等!你说,效率不高吗?答案是,除非你的table
中有几十万行或更多,否则可能不会。 SQL是为这种声明性数据构建的。