Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动Mysql更新_Php_Mysql_Triggers - Fatal编程技术网

Php 自动Mysql更新

Php 自动Mysql更新,php,mysql,triggers,Php,Mysql,Triggers,一旦达到某个数字,mysql是否可以自动更新表中的字段 我有一个名为badges的表,它有以下字段 ID,name,image,level, percent 如果百分比字段达到某个数字(例如50),则级别字段将更新为2 我认为这将是一个触发器?是的,可以用脚本完成,它由服务器自动运行和执行 按照以下步骤操作: 1) 首先,编写一段代码,在数据库字段中显示要更新的内容 2) 为服务器设置cronjob以执行查询本身 你可以做几件事 语法上的 您甚至可以用语法编写它,尽管表中的值没有更改,但只显示

一旦达到某个数字,mysql是否可以自动更新表中的字段

我有一个名为
badges
的表,它有以下字段

ID,name,image,level, percent
如果百分比字段达到某个数字(例如50),则级别字段将更新为2


我认为这将是一个触发器?

是的,可以用脚本完成,它由服务器自动运行和执行

按照以下步骤操作:

1) 首先,编写一段代码,在数据库字段中显示要更新的内容


2) 为服务器设置cronjob以执行查询本身

你可以做几件事

语法上的

您甚至可以用语法编写它,尽管表中的值没有更改,但只显示其他内容。像这样

SELECT  ID, 
        name,
        image, 
        CASE WHEN percent > 50 THEN 2 ELSE level END AS Level, 
        percent FROM....
在触发器中

每次插入后,必须计算值,然后进行相应更新。也许是这样的

DELIMITER $$

DROP TRIGGER IF EXISTS databasename.badges_AUPD$$
USE databasename$$
CREATE TRIGGER `badges_AUPD` AFTER UPDATE ON `badges` FOR EACH ROW

// Added this line from Andreas Wederbrands answer which is the correct way

set new.level := case when percent < 50 then 0
                    when percent < 75 then 1
                    else 2;
    $$
DELIMITER ;

派生值最好在读取而不是存储时进行计算,这样您就可以随时更改阈值

select ID, 
       name,
       image,
       case when percent < 50 then 0
            when percent < 75 then 1
            else 2
            as level, 
       percent
  from some_table;
选择ID,
名称
形象,,
当百分比小于50时,则为0
当百分比小于75时,则为1
其他2
作为一级,,
百分比
从某张桌子上;
另一种选择是在触发器中设置level的值

create trigger set_level
before insert on some_table
for each row begin
  set new.level := case when percent < 50 then 0
                        when percent < 75 then 1
                        else 2;
end
创建触发器集\u级别
在某些表上插入之前
每行开始
设置new.level:=百分比小于50时的情况,然后为0
当百分比小于75时,则为1
其他2项;
结束
更新前对
执行相同操作


您不应该在插入/更新一行或几行时重新计算整个表的级别。

好的。我知道如何用sql代码更新字段。我不知道当另一个字段到达某个点时如何更新该字段。除此之外,cron的工作似乎很简单。这将非常高效,而且更新不会实时发生:(你说得对极了,我忘了。这会导致每次
插入
。Tack sa mycket!出现此错误-在after TRIGGER中不允许更新新行删除刚创建的触发器,并在其上创建相同的触发器,但在插入后使用
插入
。你需要在
更新后更新
上执行此操作,因为当行是新的且nserted它自动有一个级别值,对吗?没有创建触发器。我是要在SQL选项卡下输入它吗?否,在要创建触发器的表上。Im在数据库的badges表中。
create trigger set_level
before insert on some_table
for each row begin
  set new.level := case when percent < 50 then 0
                        when percent < 75 then 1
                        else 2;
end