MySQL 事件调度程序查询?
MySQL event scheduler query?
当我在 phpmyadmin
的 SQL 选项卡上编写以下代码时:
DELIMITER $$
CREATE
EVENT `near_end_warranty`
ON SCHEDULE EVERY 1 HOUR
DO BEGIN
DECLARE numrow int;
SELECT COUNT(id) FROM equipments INTO numrow WHERE
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)>0;
IF numrow>0 THEN
INSERT INTO notifications
(eq_id,start_date,end_date,name,type,message,created_by,modified_by,
created_on,modified_on)
SELECT eq_id,warranty_start_date,warranty_end_date,'warranty','ending soon',
'warranty ends soon for','System','System',NOW(),NOW()
FROM equipments WHERE
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)>0;
END IF;
END $$
DELIMITER ;
显示以下错误:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
near 'WHERE TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW()' at line 7
我检查并试图找出错误但找不到。请有人帮我看看这是怎么回事?
INTO
子句必须 在 WHERE
子句之后:
SELECT COUNT(id)
FROM equipments
WHERE
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)>0
INTO numrow;
查看语法here(这是错误信息告诉你要检查的手册)。
所有子句都必须按照指定的顺序排列,没有灵活性。
实际上,INTO
子句有一个例外,它也可以紧跟在 SELECT
列表之后。但是不能追FROM
。所以你也可以这样写:
SELECT COUNT(id) INTO numrows
FROM equipments
WHERE
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)>0;
当我在 phpmyadmin
的 SQL 选项卡上编写以下代码时:
DELIMITER $$
CREATE
EVENT `near_end_warranty`
ON SCHEDULE EVERY 1 HOUR
DO BEGIN
DECLARE numrow int;
SELECT COUNT(id) FROM equipments INTO numrow WHERE
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)>0;
IF numrow>0 THEN
INSERT INTO notifications
(eq_id,start_date,end_date,name,type,message,created_by,modified_by,
created_on,modified_on)
SELECT eq_id,warranty_start_date,warranty_end_date,'warranty','ending soon',
'warranty ends soon for','System','System',NOW(),NOW()
FROM equipments WHERE
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)>0;
END IF;
END $$
DELIMITER ;
显示以下错误:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND TIMESTAMPDIFF(WEEK,NOW()' at line 7
我检查并试图找出错误但找不到。请有人帮我看看这是怎么回事?
INTO
子句必须 在 WHERE
子句之后:
SELECT COUNT(id)
FROM equipments
WHERE
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)>0
INTO numrow;
查看语法here(这是错误信息告诉你要检查的手册)。
所有子句都必须按照指定的顺序排列,没有灵活性。
实际上,INTO
子句有一个例外,它也可以紧跟在 SELECT
列表之后。但是不能追FROM
。所以你也可以这样写:
SELECT COUNT(id) INTO numrows
FROM equipments
WHERE
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)<5 AND
TIMESTAMPDIFF(WEEK,NOW(),warranty_end_date)>0;