Салют! Я использую следующий raw sql statement в Symfony, чтобы вставить большое количество строк из существующей таблицы INTO в другую таблицу с той же структурой, что содержит также большое количество существующих строк [потому что используемые таблицы динамически создаются для среды выполнения, там нет SYMFONY -ЮРИДИЧЕСКОЕ ЛИЦО]:
$sql_insert = "INSERT INTO table1".$proid." SELECT * from ".$tablename." ON DUPLICATE KEY UPDATE table1".$proid.".id = table1".$proid.".id + 1";
и по-прежнему получают ту же ошибку:
SQLSTATE [23000]: нарушение ограничения целостности: 1062 Дубликат записи '2' для ключа 'PRIMARY'
Это не работает для каждой записи, только для первой вставленной записи... Пожалуйста, помогите мне решить эту проблему. Как я могу обновить первичный ключ?
Symfony помогла решить проблему с дублирующимся ключом, например:
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql_insert = " SELECT * from ".$tablename."";
$stmt = $conn->prepare($sql_insert);
$stmt->execute();
$result = $stmt->fetchAll();
foreach($result as $item => $row) {
$dataArray1 = array(
'a' => $row['a'],
'b' => $row['b'],
...);
$conn->insert('pro'.$id.'', $dataArray1);
}
Правильный запрос:
INSERT INTO table(column_list)
VALUES(value_list)
ON DUPLICATE KEY UPDATE column_1 = new_value_1, column_2 = new_value_2, …
Вам нужно обновить ключ для каждого столбца.
Вы можете ссылаться на эту проблему по следующим ссылкам, надеясь, что она решит вопрос:
pro_nr_122
(id
int (11) NOT NULL,idofma
int (11) DEFAULT NULL,name
varchar (100) COLLATE utf8_unicode_ci DEFAULT NULL , VARCHAR (50) COLLATE utf8_unicode_ci DEFAULT NULL,a
b
VARCHAR (50) COLLATE utf8_unicode_ci DEFAULT NULL, ...