Я создаю схему Bar, Beer, Drinker, Likes, Frequents, Transactions.Каждый бар имеет часы открытия / закрытия для каждого дня недели.
Конкретная ошибка: у меня есть внешний цикл, который проходит через каждый бар, и внутренний цикл, чтобы назначить 1-7 записей часа открытия / закрытия для каждого бара.Несмотря на циклический просмотр и попытку вставить 1-7 записей, оператор INSERT срабатывает только один раз для каждой записи бара во внешнем цикле.
Моя таблица часов открытия / закрытия:
Bar Name varchar(45) PK FK
Bar Phone # INT PK FK
Weekday INT PK
Open Hour TIME
Close Hour TIME
Текущийвыходной результат состоит из одной записи часа открытия / закрытия на бар:
Таблица часов открытия / закрытия ПОСЛЕ выполнения процедуры
Boone's Brew Inc 2147483647 7 04:55:51 18:39:25
Boondocks Brewing Tap Room & Restaurant 2147483647 4 09:01:01 17:10:09
Boon Island Alehouse 2147483647 1 05:14:24 19:56:57
........ for 957 more bars, all with listed only once in the table with a random weekday
Желаемый выход:
Boone's Brew Inc 2147483647 7 04:55:51 18:39:25
Boone's Brew Inc 2147483647 6 04:55:51 18:39:25
Boone's Brew Inc 2147483647 5 04:55:51 18:39:25
Boone's Brew Inc 2147483647 4 04:55:51 18:39:25
Boondocks Brewing Tap Room & Restaurant 2147483647 4 09:01:01 17:10:09
Boondocks Brewing Tap Room & Restaurant 2147483647 3 09:01:01 17:10:09
Boondocks Brewing Tap Room & Restaurant 2147483647 2 09:01:01 17:10:09
Boon Island Alehouse 2147483647 1 05:14:24 19:56:57
Желаемыйвывод: 1-7 записей часа открытия / закрытия для каждого бара вместо строго строго 1.
и моя процедура:
DROP PROCEDURE fill_hours;
DELIMITER $$
CREATE PROCEDURE fill_hours()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE j INT DEFAULT 0;
DECLARE num_of_bars INT DEFAULT 0;
DECLARE bar_name varchar(45) DEFAULT "";
DECLARE bar_phone_num INT DEFAULT 0;
DECLARE weekday INT DEFAULT 0;
DECLARE open_hour TIME DEFAULT 0;
DECLARE close_hour TIME DEFAULT 0;
DECLARE start_time_factor TIME DEFAULT 0;
DECLARE end_time_factor TIME DEFAULT 0;
SELECT COUNT(*) INTO num_of_bars FROM Bar;
WHILE i < num_of_bars DO
SELECT `Bar Name`, `Bar Phone #` INTO bar_name, bar_phone_num FROM Bar LIMIT i,1;
weekday: WHILE j < 7 DO
SET weekday := (1 + FLOOR(RAND() * 7));
IF EXISTS(SELECT `Bar Name`, `Bar Phone #`, `Weekday` FROM `Opening/Closing Hours` WHERE `Bar Name` = bar_name AND `Bar Phone #` = bar_phone_num AND `Weekday` = weekday) THEN
SELECT CONCAT("weekday: ", weekday);
SET j := j + 1;
ITERATE weekday;
END IF;
SELECT SEC_TO_TIME(FLOOR(TIME_TO_SEC('13:00:00') + RAND() * (TIME_TO_SEC(TIMEDIFF('13:00:00', '15:00:00'))))) INTO start_time_factor;
SELECT SEC_TO_TIME(FLOOR(TIME_TO_SEC('20:00:00') + RAND() * (TIME_TO_SEC(TIMEDIFF('18:00:00', '19:00:00'))))) INTO end_time_factor;
SELECT SEC_TO_TIME(FLOOR(TIME_TO_SEC(start_time_factor) + RAND() * (TIME_TO_SEC(TIMEDIFF(start_time_factor, '16:00:00'))))) INTO open_hour;
SELECT SEC_TO_TIME(FLOOR(TIME_TO_SEC(end_time_factor) + RAND() * (TIME_TO_SEC(TIMEDIFF(end_time_factor, '23:59:00'))))) INTO close_hour;
INSERT INTO `Opening/Closing Hours` VALUE(bar_name, bar_phone_num, weekday, open_hour, close_hour);
SET j := j + 1;
END WHILE;
SET i := i + 1;
SET j := 0;
END WHILE;
END $$
DELIMITER ;