2016-03-10 95 views
0

我有一个表格,收集用户关于他们显示的属性(向可能的业务租赁者显示的房地产经纪人)的输入。同时插入多个外键

提交表格后,我将数据插入三个表格中:Showing,BusinessContact。该表格允许创建新的Businesses和新的Contacts,同时创建新的Showing记录。

我可以插入信息到我的Business表和我的Contacts表罚款与自动递增primary key

如何插入从Contactsprimary keyBusiness一个foreign key时,他们都在同一时间提交?

我应该从primary keyforeign key中选择一个值表吗?围绕这一点的最佳做法是什么?

此外,我想插入来自BusinessContactsforeign keysprimary keysShowing表。我目前有一个BusinessID作为foreign keyContacts之内,但也许Contacts应该独立,因此我可以Insert它第一,然后只选择为后续foreign keys

最后我应该注意,对于我使用phpMyAdmin的数据库,并通过SQL插入到.php页面中。

+2

你应该包括你试过的代码。并阅读[last_insert_id](http://dev.mysql.com/doc/refman/5.7/en/information-functions.html) –

+2

您将记录插入联系人表,获取最后一个id,引用最后一个id在将记录插入业务表中,获取最后一个ID。使用两个最后的ID将记录存储在显示表中 – jeff

+0

这就是我在想什么。有没有办法将'BusinessID'插入'Contacts'?还是我需要一个没有'外键'的表?而@Nathan和last_insert_id将在我插入到Business中时捕获“BusinessID”,还是需要在第一条语句中插入“ContactID”? – gruff

回答

0

要插入行时检索分配给AUTO_INCREMENT列的值,MySQL提供了一个last_insert_id()函数。

紧跟在一个插入成功所分配的值,以AUTO_INCREMENT列,在同一个会议上,发出任何其它SQL语句之前,你可以运行一个查询:

SELECT LAST_INSERT_ID() 

从可以返回的值在随后的INSERT中使用。在您的方案中,该值可以作为外键列的值提供。

+0

有意义,选择并存储它之前运行任何进一步的'插入'语句 – gruff

+0

正确。 INSERT语句不会同时运行。他们连续运行。一些MySQL客户端库对于'SELECT LAST_INSERT_ID()'语句具有“包装函数”,例如['mysqli_insert_id'](http://php.net/manual/en/mysqli.insert-id.php),这使得更清洁的代码。 (在代码验证插入成功后,获取该auto_increment值是一行代码。)它应该不用说...如果你使用mysqli_接口函数,你只能使用'mysqli_insert_id'。如果您使用PDO,或者如果您正在使用(不寒而栗)已过时的mysql_函数,则不是。 – spencer7593