У меня есть три таблицы в базе данных:
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
в таблице соединения или ассоциации 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') );
Или, в зависимости от того, какую команду вы используете для вставки (я имею в виду команду php), вы можете вернуть идентификаторы после вставок и использовать их для запуска команды вставки.
Это будет похоже на: (с использованием функций 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
Других решений пока нет …