ВСТАВЬТЕ НЕСКОЛЬКО СТРОКОВ в таблицу Gerund, используя Insert Into Select - PullRequest
0 голосов
/ 09 февраля 2019

Я использовал INSERT INTO SELECT для копирования значений (нескольких строк) из одной таблицы в другую.Теперь моя проблема заключается в том, как вставить строки с соответствующими идентификаторами из разных таблиц (так как они нормализованы) в таблицу герундов, потому что она выводит только одну строку в моей таблице герундов.Что я должен сделать, чтобы вставить несколько строк и соответствующие им идентификаторы в таблицу Gerund.

Мой код для таблицы Gerund выглядит следующим образом.

$ insert = "INSERT INTO table1 SELECT * FROM sourcetable«;где id1 - это pk таблицы 1.

$ result = "mysqli_query ($ conn, $ insert) $ id1 = mysqli_insert_id ($ conn);

.

Теперь таблица1 вставил несколько строк так же, как и другие 2 таблицы.

..

Предполагается, что id .. являются внешними ключами

INSERT INTO gerundtable (pk, id1, id2, id3) VALUES ($ id1, $ id2, $ id3);

Моя проблема в том, что не получается несколько строк.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Спасибо, что пытаетесь понять, а также отвечаете на мой вопрос.Я решил свой собственный код.Я использовал цикл while для получения идентификаторов каждой строки и не использовал INSERT INTO SELECT.Вот беги вниз.Так как я просто использую свой телефон голым с моим способом публикации.

 $sqlselect = SELECT * FROM table1;
While($row=mysqli_fetch_array(table1){
    $insertquery...
    $id1=mysqli_insert_id($conn)

    $insertgerundtable = INSERT INTO gerundtable VALUES ( $id1, $id2);
}
0 голосов
/ 11 февраля 2019

Согласно документации MySql :

Для многострочной вставки LAST_INSERT_ID () и mysql_insert_id () фактически возвращают ключ AUTO_INCREMENT из первой из вставленных строк.Это позволяет корректно воспроизводить вставки из нескольких строк на других серверах в настройке репликации.

Итак, возьмите количество копируемых записей и LAST_INSERT_ID(), и вы сможете точно отобразитьIDs с каждой скопированной строкой.

В строках:

$mysqli->query("Insert Into dest_table Select * from source_table");

$n = $mysqli->affected_rows; // number of copied rows

$id1 =  $mysqli->insert_id; // new ID of the first copied row
$id2 = $mysqli->insert_id + 1; // new ID of the second copied row
$id3 = $mysqli->insert_id + 2; // new ID of the third copied row
...

$mysqli->query("INSERT INTO gerundtable (pk, id1,id2,id3) VALUES ($id1,$id2,$id3)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...