CineSync/Документы/Заполнение сеансов.sql
2025-01-20 13:36:09 +05:00

68 lines
3.5 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION populate_film_sessions_with_count(start_date_session date, count_days int)
RETURNS VOID AS $$
DECLARE
film_count INT := 26; -- Общее количество фильмов
auditorium_count INT := 7; -- Общее количество залов
days_to_populate INT := count_days; -- Количество дней для заполнения
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;
select populate_film_sessions_with_count('2024-05-28', 60);
--select populate_film_sessions('2024-05-23');
--CREATE OR REPLACE FUNCTION auto_fill_films_sessions()
--RETURNS VOID AS $$
--DECLARE
-- film_count INT := 26; -- Общее количество фильмов
-- auditorium_count INT := 7; -- Общее количество залов
-- days_to_populate INT := 5; -- Количество дней для заполнения
-- start_date DATE := CURRENT_DATE + 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;