#mysql
#mysql
Вопрос:
У меня есть exercise_logs
таблица с этими столбцами:
user_id | exercise_name | mood_log_id | weight_log_id | stretch_log_id
У меня есть три таблицы ( mood_logs
, weight_logs
и stretch_logs
), первичный ключ которых хранится в 3 последних трех соответствующих столбцах exercise_logs
.
Это столбцы моей mood_logs
таблицы:
id | mood_scale
Итак, я хочу создать новую mood_logs
запись и использовать id
из нее и сохранить ее exercise_log
. Но я хочу сделать все это в одном запросе.
Вот что я пробовал до сих пор:
INSERT INTO `exercise_logs` (`exercise_name`, `user_id`, `mood_log_id`)
values('Breathing', 190, (INSERT INTO `mood_logs` (`mood_scale`)
values(9); LAST_INSERT_ID()))
Но это не работает.
Возможно ли достичь этого в одном запросе?
Большое вам спасибо.
Ответ №1:
Вы можете попробовать этот первый запрос вставить в mood_logs
INSERT INTO `mood_logs` (`mood_scale`)
values(9);
2-й запрос вставить в exercise_logs
INSERT INTO `exercise_logs` (`exercise_name`, `user_id`, `mood_log_id`)
values('Breathing', 190, (SELECT `mood_scale` FROM `mood_logs` WHERE `mood_scale` = 9))
Ответ №2:
Сначала вам нужно INSERT
ввести строку mood_logs
.
Поскольку последний вставленный идентификатор взят из приведенного выше утверждения.
Вы можете использовать last_insert_id()
непосредственно во втором операторе insert.
INSERT INTO `mood_logs` (`mood_scale`) values (9);
INSERT INTO `exercise_logs` (`exercise_name`, `user_id`, `mood_log_id`) values('Breathing', 190, last_insert_id());
Это предполагает, что вы единственный, кто использует базу данных. Если кто-то другой использует оператор INSERT до того, как вы сможете использовать last_insert_id()
then, идентификатор МОЖЕТ быть равен любому идентификатору последнего оператора insert.
Также можно использовать переменные для хранения last_insert_id()
;
INSERT INTO `mood_logs` (`mood_scale`) values (9);
SET @arbitraryVariableName = last_insert_id();
INSERT INTO `exercise_logs` (`exercise_name`, `user_id`, `mood_log_id`) values('Breathing', 190, @arbitraryVariableName);