Fen*_*nil 0 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))
Run Code Online (Sandbox Code Playgroud)
因为,许多旅行可以有很多地方,我有一个如上所述的联结表.
现在,如果用户在旅行中插入地点,则会将地点添加到places表格中,并且旅行将与trips_places_asc表格中的地点相关联.
所以,如果我写的查询如下:
INSERT INTO places (place_name)
VALUES ('XYZ')
INSERT INTO trips (trip_name)
VALUES ('MyTrip')
Run Code Online (Sandbox Code Playgroud)
然后,如何存储trip_id和place_id在Junction或Association表中trips_places_asc?我必须解雇两个问题吗?请帮助.
既然你有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') );
Run Code Online (Sandbox Code Playgroud)
或者根据您使用的命令插入(我的意思是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)";
Run Code Online (Sandbox Code Playgroud)
请注意,我是直接在脑海中这样做的,所以也许你必须调整一些语法错误或关注预备语句.
编辑 虽然我应该添加有关此命令的正确文档链接:http://php.net/manual/en/mysqli.insert-id.php