2010-09-30 4 views
0

я использую следующий код, чтобы скопировать из одной таблицы непосредственно в другую:MySQL Issue Копирование из одной таблицы в другую непосредственно

$ передаточную = $ db-> Exec ("INSERT INTO table2 SELECT * FROM table1 WHERE имя_группы = '$ gname' ");

Проблема, которую я имею, однако, это поле идентификатора обеих таблиц не обязательно совпадает (оба автоматически увеличиваются), а временами это может означать, что один временный столбец ID # выше конечной таблицы.

Я использую php, pdo и mysql.

Есть ли способ обойти это?

ответ

2

состояние, что в явной форме столбцов вы хотите:

"INSERT INTO table2 (`col_1`,`col_2`) SELECT `col_1`, `col_2` FROM table1 WHERE groupname = '$gname'" 
+0

I * может *, но есть 54 столбцов. NOT fun – JM4

+0

Я никогда не говорил, что это будет весело ... или не-ума-ошеломить ... если вы настроите некоторую инфраструктуру для «профилирования» схемы таблиц, которую вы фактически автоматизируете. конечно, больше работы, чем печатать столбцы, но если вы, вероятно, будете использовать его в других частях приложения для разных вещей, то это может стоить того. Или вы можете использовать существующий уровень доступа к данным, такой как Zend_Db, Doctrine DBAL или Creole. – prodigitalson

0
"INSERT INTO final_table SELECT * FROM temp_table WHERE temp_table.groupname = '$gname'" 

Где проблема здесь? Если оба являются auto_increment, и, как вы сказали, идентификатор temp_table более ВЫШЕ, чем perm_table, вы получите правильный эффект.

+0

Менон - вы только что скопировали и вставляли точный код, о котором я говорил, у меня были проблемы с? Окончательная таблица может быть обновлена ​​из нескольких источников, а не только temp_table, поэтому теоретически итоговая таблица может быть в счетчике 400, а время в 300 - попытка вставить # 301 вызывает ошибку; – JM4

+0

Мне очень жаль мужчина. Да, вставляя один и тот же код, было намеренно, я не рассматривал возможность добавления других источников. Извините извините. –

0

Вы также должны знать, что MySQL будет блокировать вставки в таблицы выбора:

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

+0

Что это значит даже «вставки блока»? Вы имеете в виду «если конфликтует первичный ключ?» – JM4

+0

Заблокировано обычно означает что-то ожидание чего-то другого. 'http://en.wikipedia.org/wiki/Blocking_ (вычисления)' Операторы INSERT для таблицы, которую вы выбрали, не будут завершены, пока не закончится утверждение 'INSERT INTO .. ​​SELECT ...'. –

Смежные вопросы