我在数据库中有三个表:
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_id
和place_id
存储在Junction或Association表trips_places_asc
中?
我必须解雇两个问题吗?请帮助。
注意:关于SO的问题很多,如this one和this one。但是,他们都没有接受答案,甚至没有接受答案。所以,PLZ不标记为重复。
答案 0 :(得分: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