我正在用 php 创建房间预订。
我有两个表:
表 RESERVE
- reserve_id
- 房间号
- 房间预订数量
- 结帐
table ROOM
- 房间号
- 房间数量
当“checkout”日期到了今天,reserve 表中的那一行将被删除。实际上我已经有那个事件了:
DROP EVENT `auto_delete_chckout`;
CREATE DEFINER=`root`@`localhost`
EVENT `auto_delete_chckout`
ON SCHEDULE EVERY 1 MINUTE STARTS '2013-01-26 13:09:15'
ON COMPLETION NOT PRESERVE ENABLE DO
DELETE FROM reserve WHERE checkout <= CURDATE()
所以我的问题是:
如果一个预订被删除,它的room_reserve_qty
必须添加到房间表的room_qty
中。
最佳答案
在删除表 reserve
上的记录之前, 你需要更新表 room
的记录首先你会知道哪个room_id
会更新,例如
UPDATE room a
INNER JOIN reserve b
ON a.room_id = b.room_id
SET a.room_qty = a.room_qty + b.room_reserve_qty
WHERE b.checkout <= CURDATE();
DELETE FROM reserve WHERE checkout <= CURDATE();
完整代码:
DROP EVENT `auto_delete_chckout`;
DELIMITER $$
CREATE EVENT `auto_delete_chckout`
ON SCHEDULE EVERY 1 MINUTE STARTS '2013-01-26 13:09:15'
ON COMPLETION NOT PRESERVE ENABLE
DO
BEGIN
UPDATE room a
INNER JOIN reserve b
ON a.room_id = b.room_id
SET a.room_qty = a.room_qty + b.room_reserve_qty
WHERE b.checkout <= CURDATE();
DELETE FROM reserve WHERE checkout <= CURDATE();
END $$
DELIMITER ;
<罢工>罢工>
<罢工>更新
既然你提到你是新来的,Event
,我认为,导致服务器上的大量工作。 TRIGGER
可能是另一种方式。 Trigger
基本上是一个代码块,每次在表上发生事件(之前或之后)时都会触发,例如:INSERT
, UPDATE
和 DELETE
.
<罢工>罢工>
关于mysql - 在一个事件调度程序中更新和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14544584/