0

データベースに 3 つのテーブルがあります。

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

多くの旅行には多くの場所が含まれる可能性があるため、上記のように 1 つのジャンクション テーブルがあります。

これで、ユーザーが場所を旅行に挿入すると、場所がplacesテーブルに追加され、旅行がテーブル内の場所に関連付けられtrips_places_ascます。

したがって、次のようなクエリを記述した場合:

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

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

次に、ジャンクションまたはアソシエーションテーブルに格納するtrip_id方法place_idtrips_places_asc? 2 つのクエリを実行する必要がありますか? 助けてください。

注: 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 に答える