2009-11-14 45 views
1

我正在嘗試創建2個表之間的多對多關係。我有3桌。它遵循TOXY模型。多對多關係INSERT

table a: a.id (primary key) 
table ab: ab.a_id (foreign key) ab.b_id (foreign key) 
table b: b.id (primary key) 

我應該如何插入數據以便它們全部鏈接起來?

是否這樣? "INSERT INTO a ('name') VALUES ('my name')";

那就這樣? "INSERT INTO b ('name') VALUES ('my name')";

但後來我必須有a.id和b.id把它放在表ab。我應該如何檢索它們?

我知道我可以做一個SELECT a.id FROM WHERE name ='我的名字'。但沒有一個更簡單的方法,這會自動返回一個id當你插入行?

回答

5

您只需將這些ID存儲在要用於查詢的變量中以插入到ab表中。 LAST_INSERT_ID()返回插入行的ID。所以,例如在PHP中:

// Run command to insert into A, then: 
$a = mysql_query('SELECT LAST_INSERT_ID();'); 

// Run command to insert into B, then: 
$b = mysql_query('SELECT LAST_INSERT_ID();'); 

// Then $a and $b hold the IDs that you can use to insert into AB. 
mysql_query("INSERT INTO ab (a_id, b_id) VALUES ($a, $b);"); 
+0

+!詳細我沒有提供 – 2009-11-14 21:08:31

+0

謝謝你釘上它 – ajsie 2009-11-14 21:08:40

+0

等待!它不工作!因爲它說,當我嘗試echo $ a: 可捕獲的致命錯誤:類mysqli_result的對象無法轉換爲字符串/Volumes/Private/johnnyluu/Sites/sandbox/test/index.php在線35 – ajsie 2009-11-14 21:23:58

1

您可以通過調用mysql_insert_id() function獲得存儲到AUTO_INCREMENT主鍵列中的值:

SELECT LAST_INSERT_ID() 
+0

last_insert_id和mysql_insert_id有什麼區別? – ajsie 2009-11-14 21:09:19

+0

'mysql_insert_id'是C API調用,實際上調用了'SELECT LAST_INSERT_ID()'。詳細信息在我提供給文檔的鏈接中。 – 2009-11-14 21:11:56

1

我不知道該TOXY模型是什麼,但你可以使用一個簡單連接:

SELECT * FROM a INNER JOIN ab on a.id=ab.a_id WHERE ab.b_id = {b.id};

對於您的實例{b.id}將是last_insert_id();