在联结表中插入值

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_idplace_id在Junction或Association表中trips_places_asc?我必须解雇两个问题吗?请帮助.

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

Jor*_*pos 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') );
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

  • 谢谢..但是如果我从trip_name中删除唯一键怎么办? (3认同)
  • 然后你将不得不使用第二个选项.我将使用php命令编写一个小例子来编辑答案.等一会儿. (2认同)