2016-03-10 127 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