Запрос на вставку одной записи (ID) из одной таблицы в другую таблицу

0

Помогите мне с запросом 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

Спасибо за помощь...

  • 1
    Возможный дубликат INSERT с помощью SELECT
  • 0
    Если вы видите ответ в комментарии, я думаю, что вы просто не можете сделать INSERT INTO для ОДНОГО столбца, если в вашей таблице много столбцов и нет значения по умолчанию. Вы должны сделать что-то вроде INSERT INTO (column1, column2,...columnN) VALUES ('value1', 'value2',...'valueN') и если вам нужно, вы можете сделать SELECT вместо VALUE, часть SELECT column1, column2,...columnN FROM... Не знаю, понятно ли это, но это то, что я понимаю после прочтения INSERT с помощью SELECT anwser
Теги:
sql-update
sql-insert

2 ответа

1

Предполагая, что вы делаете это через 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));
 }

Знаю, я делаю много предположений. Но я не могу прокомментировать, так что это мой единственный способ помочь.

  • 0
    Я не осуждаю вас, потому что вы не можете использовать комментарии, но в следующий раз, если у вас нет ответа, не публикуйте предположение, не понимая фактических требований.
-2

К сожалению, ваш метод не соответствует действительности и нелогичен. У вас на момент записи нет поля, которое могло бы объединить данные таблицы, поэтому вам нужно сначала получить task_id, а затем вставить его в запрос

  • 1
    Я отказался, потому что вам нужно использовать комментарии для этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню