在不使用事务的情况下从多个查询中获取行 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用任何 ID 的情况下从 spotify API 获取艺术家列表