【问题标题】:Many-to-many relationship INSERT多对多关系 INSERT
【发布时间】:2009-11-14 20:57:53
【问题描述】:

我正在尝试在 2 个表之间创建多对多关系。我为此准备了 3 张桌子。遵循TOXY模型。

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 中。我应该如何找回它们?

我知道我可以从 WHERE name = 'my name' 中选择 a.id。但是有没有更简单的方法可以在您插入行时自动返回一个 id?

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    您需要做的就是将这些 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);");
    

    【讨论】:

    • +!对于我没有提供的细节
    • 等等!它不起作用!因为它说当我尝试回显 $a: Catchable fatal error: Object of class mysqli_result could not be convert to string in /Volumes/Private/johnnyluu/Sites/sandbox/test/index.php on line 35
    • 我使用的是 mysqli 版本。也许这就是问题所在?
    【解决方案2】:

    您可以通过调用mysql_insert_id() function获取存储到auto_increment主键列中的值:

    SELECT LAST_INSERT_ID()
    

    【讨论】:

    • last_insert_id和mysql_insert_id有什么区别?
    • mysql_insert_id 是 C API 调用,实际上是在调用 SELECT LAST_INSERT_ID()。详细信息在我提供给文档的链接中。
    【解决方案3】:

    我不确定 TOXY 模型是什么,但您可以使用简单的连接:

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

    对于您的实例,{b.id} 将是 last_insert_id();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 2014-10-11
      相关资源
      最近更新 更多