首页 > 解决方案 > MySql 事件,每天更新并根据其内容更改数据库中的某些项目

问题描述

基本上,我正在创建一个简单的拍卖网站。我希望代码在每晚 9 点检查设置为今天到期的项目。如果找到,它应该将出价最高的人作为买方插入数据库。这是我到目前为止所拥有的,但它不起作用:

DELIMITER $$

CREATE 
    EVENT `sold` 
    ON SCHEDULE EVERY 1 DAY STARTS '2018-05-03 21:00:00' 
    DO BEGIN
        declare amt int;
        declare counter int;
        set counter=0;
        set amt = SELECT COUNT(*) FROM ITEMS;
        declare test;
while (counter < amt)
begin
    set test = select Visibility FROM ITEMS where Keyy = counter;
    if (test == 1)
        set test = select sold from ITEMS where Keyy = counter;
        if (!test)
            set test = select Exp from ITEMS where Keyy = counter;
            if (test == CURDATE())
                UPDATE ITEMS SET `sold`= `bidder` WHERE Keyy =counter;
set counter = counter + 1;

end

    END */$$

DELIMITER ;

标签: phphtmlmysqldatabasemysqli

解决方案


MySQL中 d 变量的标识符DECLARE不以@;开头 这仅适用于“会话”变量(对于与数据库的连接是全局的)。

还:

  • “test”没有用类型声明
  • ==不是 MySQL 中的相等运算符,只是=
  • set variable = select ...如果选择不能保证单个结果,则可能会出现问题;其中一些可能需要LIMIT 1子句....虽然看起来您只是在检查数据是否存在,所以EXISTS查询可能对这些更有帮助。
  • 您最后的计数增量缺少 SET
  • */不属于那里,是关闭块评论。

DECLARE 只允许在 BEGIN ... END 复合语句中使用,并且必须在其开始处,在任何其他语句之前

来自https://dev.mysql.com/doc/refman/8.0/en/declare.html

这意味着您不能交错 DECLARE 和 SET。


推荐阅读