Помогите мне с запросом mysql...
У меня такая ситуация:
таблица 1 - задачи
**id**|task_name|status|created_at|updated_at|user_id
и таблица 2 - образцы
id|sample_name|...|...|...many other things|**task_id**|user_id
Я хочу, чтобы в таблице 2 в столбце "task_id" был "id" из таблицы 1 или "tasks.id"?
У меня есть этот запрос, но результат - номер 1 в каждом столбце, а не идентификатор каждой записи.
INSERT INTO samples(task_id),
SELECT tasks.id from tasks
JOIN samples
ON task_id = tasks.id
Спасибо за помощь...
Предполагая, что вы делаете это через PHP (основываясь на том, что вы помечаете его), и предполагая, что вам нужна вставка в обе таблицы, основной jist будет (также предполагая, что поле id в задачах является автоматическим приращением):
$stmt1 = $conn->prepare("INSERT INTO tasks (fields, other_fields) VALUES (?, ?)"))
{
$stmt1->bind_param("ss",$fields, $other_fields);
$stmt1->execute();
$lastid = $conn->insert_id;
$stmt1->close();
}
Теперь вы можете использовать переменную $ lastid в качестве значения при вставке данных образцов.
$stmt2 = $conn->prepare("INSERT INTO samples (id, other_fields, task_id) VALUES (?, ?, /)"))
{
$stmt2->bind_param("isi",$ID, $other_fields, $lastid);
$stmt2->execute();
$stmt2->close();
}
Если образцы уже существуют, и вам нужно обновить его с помощью идентификатора из задач, вы просто обновите образцы после вставки в задачи, предполагая, что у вас есть что-то использовать в предложении where, которое может однозначно идентифицировать запись, которую вы хотите обновить:
$stmt2 = $conn->prepare("UPDATE samples set task_id = ? where user_id - ?)
$stmt2->bind_param("ii",$lastid, $user_id);
$stmt2->execute();
$stmt2->close();
}
else {
die(mysqli_error($conn));
}
Знаю, я делаю много предположений. Но я не могу прокомментировать, так что это мой единственный способ помочь.
К сожалению, ваш метод не соответствует действительности и нелогичен. У вас на момент записи нет поля, которое могло бы объединить данные таблицы, поэтому вам нужно сначала получить task_id, а затем вставить его в запрос
INSERT INTO (column1, column2,...columnN) VALUES ('value1', 'value2',...'valueN')
и если вам нужно, вы можете сделать SELECT вместо VALUE, частьSELECT column1, column2,...columnN FROM...
Не знаю, понятно ли это, но это то, что я понимаю после прочтения INSERT с помощью SELECT anwser