【问题标题】:Counting occurrences of rows that have 3 column values the same MySQL计算具有 3 个列值的行的出现次数与 MySQL 相同
【发布时间】:2019-03-19 10:15:21
【问题描述】:

MySQL BEFORE INSERT 触发器

我有一个bookings 表。我有 3 列称为

facility_id, booking_date, time_slot

我还有另一个名为facility 的表,其中有一列名为facility_id。 它们由WHERE bookings.faciliy_id = facility.facility_id链接

我正在尝试计算预订表中的 3 列重复时的发生情况,即:

1, 2017-02-02,08:00
1, 2017-02-02,08:00

我希望这是 2。

然后我试图检查这个结果,看看它是否 >= 到存储在设施表中的设施容量。如果为真则抛出错误消息。

DELIMITER
//
 CREATE TRIGGER facility_full BEFORE INSERT ON bookings
    FOR EACH ROW
        BEGIN 
        SELECT DISTINCT facility_id, booking_date, timeslot, COUNT(*) FROM bookings 
        SET COUNT = Answer
            IF (Answer) >=  facility_capacity
            THEN  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Facility Full';
            WHERE bookings.facility_id = facility.facility_id;
            END IF;
    END 
 //
 DELIMITER ;

【问题讨论】:

    标签: mysql triggers count where sql-insert


    【解决方案1】:

    正如您所说,计算预订表中的 3 列重复时的出现次数。这是解决问题的一种方法。

    DELIMITER
    //
     CREATE TRIGGER facility_full BEFORE INSERT ON bookings
        FOR EACH ROW
            BEGIN 
            DECLARE v_count int;
            Declare msg TEXT;
            DECLARE v_facility_capacity  int;
    
    
            select count(*) into v_count from bookings where facility_id = New.facility_id and booking_date  = new.booking_date  and time_slot = new.time_slot;
    
    select facility_capacity  into v_facility_capacity from facility 
    where facility.facility_id = New.facility_id;
    
                IF (v_count) >=  v_facility_capacity  THEN
                set msg = concat('MyTriggerError: Facility Full: ', cast(new.facility_id as char));
                signal sqlstate '45000' set message_text = msg;
                END IF;
        END 
     //
     DELIMITER ;
    

    【讨论】:

    • 谢谢,我应该在哪里插入 WHERE 子句,因为我需要从设施表中获取设施容量。 (即 WHERE bookings.facility_id = facility_facility_id)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2013-08-05
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多