Saya ingin membandingkan jumlah nilai pada tabel satu dengan nilai batas pada tabel 2 . Saya mencoba dengan kendala atau pemicu tetapi tidak berhasil membantu

Seperti pada foto di bawah ini ada 2 tabel tabel 1 memiliki 2 kolom cadangan dan tersedia Kolom ini berasal dari pengguna dan tidak boleh melebihi batas pada tabel kedua..

Sebagai contoh pengguna dapat memasukkan jumlah berapa pun di mana jumlah semua kolom harus kurang dari batas

Pada tabel satu saya dapat memasukkan nilai di kolom yang dipesan yang dapat berkisar antara 0 hingga batas pada tabel 2 tetapi jika batas tercapai maka tidak dapat menambahkan lebih banyak baris untuk elemen itu

create table booked (room_id foreign key (room_id),
   booked datetime, booked_seats int, remaining_seats);

create table rooms ( room_id primary key
   room_size int);

Kursi yang dipesan dilakukan oleh pengguna, saya memiliki pemicu terpisah untuk itu untuk memastikan pengguna masuk dengan benar, menginginkan pemicu atau sesuatu yang serupa yang akan memeriksa jumlah semua kursi yang dipesan di tabel pertama dan membandingkan dengan room_size di tabel kedua. jika jumlahnya kurang dari ukurannya, itu akan diedit atau mengembalikan kesalahan

create trigger test after insert on booked 
begin 
if sum of all (new.booked ) where the id is same > table2.limit then
    ....
end

I used trigger to compare values but it did not work

-1
Deamon 19 April 2020, 19:03

1 menjawab

Jawaban Terbaik

Untuk jawaban yang cepat dan baik, Anda memerlukan lebih banyak hal daripada yang Anda berikan contoh data yang berfungsi misalnya

Pemicu ini akan memblokir setiap upaya untuk memasukkan jika room_size lebih kecil dari jumlah kursi.

Silakan baca bagian akhir di sana saya jelaskan, di mana Anda harus meletakkan beberapa pekerjaan

DELIMITER $$
CREATE TRIGGER check_roomsize_Before_Insert BEFORE insert on booked 
FOR EACH ROW
begin 
    if (SELECT SUM(booked_seats) + NEW.booked_seats FROM booked  WHERE room_id  = NEW.room_id  AND booked  = NEW.booked  GROUP BY room_id) 
        > (select room_size from rooms where rooms.room_id= new.room_id) then
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Roomsize too smal!';
    end if;
END$$
DELIMITER ;

Skema (MySQL v5.7)

create table rooms ( room_id int primary key,
   room_size int);

 create table booked (room_id int,
   booked datetime, booked_seats int, remaining_seats int,    CONSTRAINT fk_category
    FOREIGN KEY (room_id) 
        REFERENCES rooms(room_id));

INSERT INTO rooms VALUES ( 1,5);

DELIMITER $$
CREATE TRIGGER check_roomsize_Before_Insert BEFORE insert on booked 
FOR EACH ROW
begin 
    if (SELECT SUM(booked_seats) + NEW.booked_seats FROM booked  WHERE room_id  = NEW.room_id  AND booked  = NEW.booked  GROUP BY room_id) 
        > (select room_size from rooms where rooms.room_id= new.room_id) then
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Roomsize too smal!';
    end if;
END$$
DELIMITER ;

INSERT INTO booked VALUES (1,now(),3,2);
#INSERT INTO booked VALUES (1,now(),3,0);

Kueri #1

SELECT * FROM booked;

| room_id | booked              | booked_seats | remaining_seats |
| ------- | ------------------- | ------------ | --------------- |
| 1       | 2020-04-19 20:04:07 | 3            | 2               |

Lihat di DB Fiddle

Seperti yang Anda lihat dalam contoh 1 baris dimasukkan dan yang kedua, memberikan pengecualian.

Anda perlu meningkatkan bagian di mana saya meringkas kursi yang dipesan di sana saya membuat

DAN dipesan = BARU. dipesan

Karena saya tidak tahu pasti kriteria waktu yang akan dihitung untuk menjumlahkan jumlah kursi yang lengkap. Stempel waktu sekarang tidak masuk akal untuk menguji pemicu saya perlu beberapa tanggal.

0
nbk 19 April 2020, 20:12