Для дальнейшего использования:
В моей базе данных все ассоциативные объекты содержат символ "$".
Например, таблица "property_type $ question" связывает мою таблицу "property_type" и мою таблицу "question".
Я создаю эту хранимую процедуру для создания опросов для данного свойства:
/*---------- PROCEDURE TO GENERATE SURVEY FOR A PROPERTY ----------*/
DELIMITER //
CREATE PROCEDURE GenerateSurvey (IN input_property_id INT)
BEGIN
INSERT INTO survey (checksum_xxx, cas_id)
VALUES
(123, 'CAS-XXX-YYYY');
SELECT LAST_INSERT_ID() INTO @last_survey_id;
INSERT INTO property$survey (property_id, survey_id)
VALUES
(input_property_id, @last_survey_id);
SELECT property_type$question.question_id
INTO @survey_questions
FROM (
SELECT property.id AS 'property_id',
property_type.id AS 'property_type_id'
FROM property JOIN property_type
ON property.property_type_id = property_type.id
WHERE property.id = input_property_id
) AS subquery join property_type$question
ON subquery.property_type_id = property_type$question.property_type_id
WHERE subquery.property_id = input_property_id;
INSERT INTO survey$question$answer (survey_id, question_id)
VALUES
(@last_survey_id, @survey_questions);
END //
DELIMITER ;
Я получаю эту ошибку:

Я подозреваю, что эта ошибка происходит при последней вставке моей хранимой процедуры при вставке в таблицу survey$question$answer
.
Возвращает ошибку, поскольку @last_survey_id
содержит один идентификатор опроса, а @survey_questions
содержит несколько идентификаторов вопросов.
Я хочу вставить несколько строк в таблицу survey$question$answer
.
Каждая строка должна иметь одинаковый survey_id
(хранится в @last_survey_id
), но каждая строка должна иметь различное значение для question_id
(хранится в @survey_questions
).
Например:
Если опросу с идентификатором 2 принадлежат вопросы с идентификаторами 4, 5 и 6, я бы хотел, чтобы он выглядел следующим образом:
survey_id |вопрос_ид
2 |4
2 |5
2 |6
Однако не в каждом опросе содержится одинаковое количество вопросов.Это означает, что я не могу использовать вставку в формате:
INSERT INTO survey$question$answer (survey_id, question_id)
VALUES
(@last_survey_id, @survey_questions);
(@last_survey_id, @survey_questions);
(@last_survey_id, @survey_questions);
, потому что нет никакого способа узнать, сколько вопросов будет иметь опрос.
Таким образом, опрос 3 может иметьвопросы 10, 20, 30, 40 и 50.
Это должно привести к:
survey_id |вопрос_ид
3 |10
3 |20
3 |30
3 |40
3 |50
Итак, как мне пройти все значения в @survey_questions
и вставить строку для каждого отдельного значения, а затем одновременно вставить одно и то же значение (в @last_survey_id
) для каждой строки?
Будет ли это работать лучше, если я просто сделаю их отдельно?
Может быть, сначала вставьте все question_id
с, а затем обновите строки, включив в них одинаковые survey_id
для каждой строки?Мне трудно понять, как бы я это сделал ...
Спасибо!