在不使用事务的情况下从多个查询中获取行 ID

Posted

技术标签:

【中文标题】在不使用事务的情况下从多个查询中获取行 ID【英文标题】:Get row id from multiple query without using transactions 【发布时间】:2016-03-19 20:44:08 【问题描述】:

我正在创建社交网站,И 有墙,用户帖子将被获取。当用户创建新帖子时,他们可以选择附加照片。 帖子和附件有不同的数据库表和不同的控制器和模型。

问题是当我执行插入新的查询时 post И 需要再查询一个附件女巫将持有 post_id。所以首先我需要在数据库中插入帖子然后И 需要为那个帖子插入附件?但是,当所有查询在一段时间内执行时,如何获取该帖子的 id 呢?

让我们看看我的桌子:

发帖

post_id  account_id  post_text       
-------  ----------  -----------------------
1          1         Hello world post

附件

attachment_id  post_id  attachment_type  attachment_name  
-------------  -------  ---------------  -----------------
1              1          3               photo_1.jpg
2              1          2               video_1.mp4
3              1          3               photo_2.jpg

我不想为此使用交易。

提交时我需要插入:

INSERT INTO post bla bla bla
INSERT INTO attachments bla bla bla <post_id> //how to get it when is executed in some time?

【问题讨论】:

这里是获取last insert id 的简单示例:w3schools.com/php/php_mysql_insert_lastid.asp 我试试看。这是不是有点糟糕,因为它包含大量信息和大约 12,000 个个人资料? 请出示您的代码?正如你在两行中提到的不清楚。 $this->db->insert_id(); 我只有粗鲁,我需要控制器的逻辑,如何从帖子中获取该 ID 并插入它。 【参考方案1】:

如果您使用的是 codeigniter,则必须有一些选项来获取我之前以这种方式使用的插入 id......

$this->db->insert('posts', $post_data);
$insert_id = $this->db->insert_id();

【讨论】:

是的,这项工作很好。但是如果我没有附件怎么办?我一直在获取最后一个 ID 的新附件行【参考方案2】:

您必须从 post 表中获取最后插入的 id,然后将 insert 获取到带有引用 id 的 attachments 表中

INSERT INTO post (<FIELDS>) VALUES (<VALUES)

$pdo->insert('posts', $yourData);
$lastInsertId = $pdo->lastInsertId();

然后你必须插入到attachments

INSERT INTO attachments (<FIELDS>) VALUES (<VALUES)

【讨论】:

以上是关于在不使用事务的情况下从多个查询中获取行 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在不创建查询的情况下从 Access 表中获取值

如何在不使用任何 ID 的情况下从 spotify API 获取艺术家列表

有没有办法在不加入公会的情况下从提及中获取用户的 ID?

如何在不回显的情况下从 shell 脚本中获取密码

如何在不知道 id 的情况下从内页获取父 iframe 元素?

如何在不使用 regexp_like 的情况下从列中获取整数