查询从一个表到另一个表插入一个记录(ID)

时间:2018-02-22 09:18:25

标签: php mysql sql-update sql-insert

请帮我解决mysql查询...

我遇到这种情况:

表1 - 任务

**id**|task_name|status|created_at|updated_at|user_id 

和表2 - 样本

id|sample_name|...|...|...many other things|**task_id**|user_id

我希望在第2列的第2列中找到它; task_id"是" id"来自表1或" tasks.id" ?

我有这个查询,但结果是每列中的数字1而不是每个条目的ID ..

INSERT INTO samples(task_id), 
SELECT tasks.id from tasks
JOIN samples
ON task_id = tasks.id

感谢您的帮助...

2 个答案:

答案 0 :(得分: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();
        }

如果样本已经存在并且您需要使用任务中的id更新它,那么您只需在插入任务后更新样本,假设您可以在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));
 }
我知道,我做了很多假设。但我无法发表评论,所以这是我唯一的协助方式。

答案 1 :(得分:-2)

不幸的是,您的方法不正确且不合逻辑。 在您录制的那一刻,没有可以统一表格数据的字段,因此您需要先获取 task_id ,然后将其插入查询