php - 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 ;
解决方案
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。
推荐阅读
- shinyproxy - shinyproxy:如何绕过登录页面功能以避免登录两次?
- java - GridDB 的 set_auto_commit() 函数的使用
- r - 调整水平图例和绘图标题之间的距离 ggplotly
- robot - 获取传感器数据和电机控制值?
- python - 我的 else 语句有问题
- python - 如何在 Python 3.7 上安装 Python Catalyst,出现错误?
- c# - 如何为已翻译的 SQL 查询找到等效的 Linq 命令
- .net - 在 .NET WinForms 应用程序中渲染之前使用 SharpDX/Direct2D 处理多个图像时出现意外延迟
- azure-active-directory - 如何在 Azure AD 上发布我的 MDM 和 MAM 库中的 MDM 应用程序?
- python - django-rest-framework 使用 ManyToManyField 的相关名称获取关注者