2009-11-14 37 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();