Есть ли способ автоматически генерировать строки с разными датами, но оставить остальную часть данных одинаковой?
Например, я пытаюсь создать ниже один раз каждые 7 недель? Есть ли способ сделать это, или я должен повторить это ниже вручную?
INSERT INTO courses ( CourseCode ,OrganiserID ,TopicID ,StartDate ,EndDate ,Week ,LocationID ,CourseFee )
SELECT 'TEMP',9,51,'2018-01-22','2018-01-26',4 -- Week ,2,CourseFee FROM topic WHERE TopicID=51;
Это решение для вас:
Создать таблицу с идентификатором
Вставьте от 1 до 52 за 52 недели
Выберите начальный и конечный день недели из таблицы.
Вставьте другие данные с датой начала и окончания недели
Create table test1(id int not null PRIMARY KEY);
INSERT into test1 select 1;
insert ignore into test1 select id+(select max(id) from test1) from test1;
insert ignore into test1 select id+(select max(id) from test1) from test1;
insert ignore into test1 select id+(select max(id) from test1) from test1;
insert ignore into test1 select id+(select max(id) from test1) from test1;
insert ignore into test1 select id+(select max(id) from test1) from test1;
insert ignore into test1 select id+(select max(id) from test1) from test1;
delete from test1 where id >52;
-- Select 52 week begin and end date
select DATE_ADD('2017-01-02',INTERVAL (id-1)*7 DAY) Week_begin_date, DATE_ADD('2017-01-02',INTERVAL (id-1)*7+4 DAY) Week_end_date from test1;
--Insert Data for 52 weeks
INSERT INTO courses ( CourseCode ,OrganiserID ,TopicID ,StartDate ,EndDate ,Week ,LocationID ,CourseFee )
SELECT 'TEMP',9,51,DATE_ADD('2017-01-02',INTERVAL (id-1)*7 DAY), DATE_ADD('2017-01-02',INTERVAL (id-1)*7+4 DAY) ,id, <LocationID_value>, <CourseFee_value> from test1;
Я не уверен в ваших требованиях к "разным датам". Если вам просто нужны разные отметки времени от одной строки к следующей, будет работать следующее:
INSERT INTO courses ( CourseCode ,OrganiserID ,TopicID ,StartDate ,EndDate ,Week ,LocationID ,CourseFee )
SELECT 'TEMP',9,51,NOW(), NOW(),4,2,CourseFee
FROM topic WHERE TopicID=51;
Если "разные даты" означают, что каждая дата в одной строке должна быть другой календарной датой, будет работать следующее:
INSERT INTO courses ( CourseCode ,OrganiserID ,TopicID ,StartDate ,EndDate ,Week ,LocationID ,CourseFee )
SELECT 'TEMP',9,51,NOW(), NOW() + INTERVAL 1 DAY,4,2,CourseFee
FROM topic WHERE TopicID=51;
Просьба уточнить требования к "разным датам", и я могу составить лучший ответ.