1

PHPで部屋の予約を作成しています。

私は2つのテーブルを持っています:

テーブルRESERVE

  • reserve_id
  • room_id
  • room_reserve_qty
  • チェックアウト

テーブルROOM

  • room_id
  • room_qty

「チェックアウト」日が今日の日付に達すると、予約テーブルのその行が削除されます.実際には、すでにそのイベントがあります:

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

4

2 に答える 2

1

table のレコードを削除する前に、最初reserveに table のレコードを更新する必要があります。これにより、どのレコードが更新される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、サーバー上で多くの作業が必要になると思います。ATRIGGERは逆かもしれません。Aは基本的に、イベント ( before または after ) がテーブルで発生するTriggerたびに起動されるコードのブロックです。INSERTUPDATEDELETE

于 2013-01-27T05:05:48.203 に答える