MySQL Issue Копирование из одной таблицы в другую напрямую

0

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

$transfer = $db- > exec ( "INSERT INTO table2 SELECT * FROM table1 WHERE groupname = '$ gname'" );

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

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

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

Теги:
insert
pdo

3 ответа

2
Лучший ответ

Объяснение: какие столбцы вы хотите:

"INSERT INTO table2 (`col_1`,`col_2`) SELECT `col_1`, `col_2` FROM table1 WHERE groupname = '$gname'"
  • 0
    Я мог бы, но есть 54 столбца. Не весело
  • 0
    Я никогда не говорил, что это будет весело ... или не оцепенело ... если вы настроите некоторую инфраструктуру для "профилирования" схемы таблиц, вы фактически автоматизируете это. Конечно, это больше, чем печатать столбцы, но если вы, скорее всего, будете использовать его в других частях приложения для разных целей, это может стоить того. Или вы можете использовать существующий уровень доступа к данным, такой как Zend_Db, Doctrine DBAL или Creole.
0

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

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

  • 0
    что это вообще значит "блок вставки"? Вы имеете в виду "если первичный ключ конфликтует?"
  • 0
    Заблокированный обычно относится к чему-то ожидающему чего-то другого http://en.wikipedia.org/wiki/Blocking_(computing) Операторы INSERT для таблицы, из которой вы выбираете, не будут выполнены до тех пор, пока не закончится INSERT INTO .. SELECT ...
0
"INSERT INTO final_table SELECT * FROM temp_table WHERE temp_table.groupname = '$gname'"

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

  • 0
    Менон - ты только что скопировал и вставил точный код, который я упомянул, у меня были проблемы? Финальная таблица может быть обновлена из нескольких источников, а не только из temp_table, поэтому теоретически финальная таблица может находиться на счетчике 400, а temp на 300 - попытка вставить # 301 вызывает ошибку;
  • 0
    Мне так жаль, парень. Да, вставка того же кода была преднамеренной, я не рассматривал возможность добавления данных другими источниками. Извините извините.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню