加入两个INSERT INTO

时间:2017-12-30 16:46:49

标签: mysql

我不确定如何正确表达这一点,所以就这样了。

我正在设计一个小型的webapp,在我的数据库中,我有一个userscommitsuserCommits的表格。这是非常小的,因为在users中有一个ID是自动编号,而commits有一个类似的ID列。现在userCommits将它们链接在一起,如下图所示。

https://i.gyazo.com/1d8ad47a2bad919efe5a5e8f7f9e4e82.png

我所做的是INSERT INTO commits (...) VALUES (...),但问题是我如何在userCommits中创建链接,以便userCommits.commitID等于正确的提交。我觉得我不应该只是查询表找到最新的并使用它的ID。有没有办法以某种方式加入ID?

我知道我可以像这样进行查询,列出用户通过电子邮件提交的所有内容。

SELECT
commits.id,
commits.cName,
users.email
FROM
commits
INNER JOIN userCommits ON commits.id = userCommits.commitID
INNER JOIN users ON userCommits.userID = users.id
WHERE users.email = "someonecool@hotmail.com"

但我现在要做的是在用户创建提交时插入数据库。

2 个答案:

答案 0 :(得分:2)

执行插入并为一个表选择插入的id作为同一命令的一部分,然后对另一个表执行相同的操作

一旦您的应用知道了两个ID,它就可以插入到usercommits表中

请参阅Get the new record primary key ID from mysql insert query?

答案 1 :(得分:0)

所以我没有提到我正在使用CodeIgniter。我的错。然而,提供的解决方案将起作用我只想发布实际用于可能遇到此问题的其他人的内容。

当我学习mySQL时,每个客户都会得到一个自己的会话。这意味着当您致电$this->db->insert_id(),SELECT LAST_INSERT_ID();时,它将返回您上次输入的ID,而不是服务器上次输入的ID。

$commitData = array(
            'cName'        => $this->input->post('commitName'),
            'cLocation'        => $this->input->post('location'),
            'cStartDate'        => $this->input->post('startDate'),
            'cEndDate'        => $this->input->post('endDate')
        );

$this->db->insert('commits', $commitData);

$userData = array(
            'commitID'        => $this->db->insert_id(),
            'userID'        => $user->id
        );

$this->db->insert('userCommits', $userData);

显然会围绕这个建立安全性,但这只是基本的细节。