From 007658b326fc89bb4fb090e084eb0805e843a61a Mon Sep 17 00:00:00 2001 From: andrei Date: Thu, 25 Apr 2024 09:34:32 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D0=B5=D0=B0?= =?UTF-8?q?=D0=BD=D1=81=D0=BE=D0=B2=20(=D0=B4=D0=BB=D1=8F=20postgres)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Документы/Заполнение сеансов.sql | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Документы/Заполнение сеансов.sql diff --git a/Документы/Заполнение сеансов.sql b/Документы/Заполнение сеансов.sql new file mode 100644 index 0000000..8c9e5e3 --- /dev/null +++ b/Документы/Заполнение сеансов.sql @@ -0,0 +1,31 @@ +CREATE OR REPLACE FUNCTION populate_film_sessions(start_date_session date) +RETURNS VOID AS $$ +DECLARE + film_count INT := 26; -- Общее количество фильмов + auditorium_count INT := 7; -- Общее количество залов + days_to_populate INT := 5; -- Количество дней для заполнения + start_date DATE := start_date_session + INTERVAL '1 day'; -- Начальная дата заполнения (завтра) + session_times TIME[] := ARRAY['10:00'::TIME, '13:30'::TIME, '17:00'::TIME, '20:30'::TIME]; -- Время сеансов + film_id INT; + start_datetime TIMESTAMP; + end_datetime TIMESTAMP; +BEGIN + FOR i IN 0..(days_to_populate - 1) LOOP + FOR j IN 1..auditorium_count LOOP + FOR k IN 1..4 LOOP + -- Выбор случайного фильма + PERFORM setseed(random()); + film_id := (SELECT id FROM films_films ORDER BY random() LIMIT 1); + + -- Вычисление даты и времени начала сеанса + start_datetime := COALESCE(start_date + i + session_times[k], start_date); + end_datetime := COALESCE(start_datetime + INTERVAL '2 hours', start_datetime); -- Длительность фильма 2 часа + + -- Вставка данных в таблицу + INSERT INTO timetable_film_sessions (start_datetime, end_datetime, price, film_id, auditorium_id) + VALUES (start_datetime, end_datetime, round(random() * 500 + 200), film_id, j); + END LOOP; + END LOOP; + END LOOP; +END; +$$ LANGUAGE plpgsql;