在联结表中插入值

时间:2014-10-31 16:50:39

标签: php mysql sql database junction-table

我在数据库中有三个表:

 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')

然后,如何将trip_idplace_id存储在Junction或Association表trips_places_asc中? 我必须解雇两个问题吗?请帮助。

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

1 个答案:

答案 0 :(得分:5)

由于您place_nametrip_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