0

我在数据库中有三个表:

 trips(trip_id(pk), trip_name(unique), user_id(fk))

 places(place_id(pk), place_name(unique))

 trips_places_asc(trip_id(fk), place_id(fk))

因为,很多旅行可以有很多地方,所以我有一张如上所述的连接表。

现在,如果用户在行程中插入地点,这些地点将被添加到places表中,并且行程将与trips_places_asc表中的地点相关联。

所以,如果我写这样的查询:

INSERT INTO places (place_name)
VALUES ('XYZ')

INSERT INTO trips (trip_name)
VALUES ('MyTrip')

那么,如何在 Junction 或 Association 表中存储trip_id和?我必须触发两个查询吗?请帮忙。place_idtrips_places_asc

注意:关于 SO 的问题有很多,例如this onethis one。但是,他们都没有接受答案,甚至没有接受答案。所以,请不要标记为重复。

4

1 回答 1

5

由于您拥有place_name并且trip_name独一无二,请执行以下操作:

insert into  trips_places_asc ( trip_id, place_id )
    values (  (select trip_id from trips where trip_name = 'MyTrip'),
              (select place_id from places where place_name = 'XYZ') );

或者根据您用于插入的命令(我的意思是 php 命令),您可以在插入后返回 id 并使用它来运行插入命令。

它会像:(使用 mysqli* 函数)

$query = "INSERT INTO trips (trip_name) values ('MyTrip')";
$mysqli->query($query);
$trip_id = $mysqli->insert_id;

$query2 = "INSERT INTO places (place_name) values ('XYZ')";
$mysqli->query($query2);
$place_id = $mysqli->insert_id;

$query3 =  "insert into trips_places_asc ( trip_id, place_id ) "; 
$query3 .= " values ($trip_id, $place_id)";

请注意,我是直接从脑海中进行此操作的,因此您可能必须调整一些语法错误或担心准备好的语句。

编辑 虽然我应该添加有关此命令的正确文档链接:http: //php.net/manual/en/mysqli.insert-id.php

于 2014-10-31T16:56:42.093 回答