2013-09-09 5 views
3

Я хотел бы прочитать данные из одной таблицы моего db (SELECT со страниц) и скопировать их в несколько таблиц в соответствии с INSERT. Мой скрипт отлично работает, когда Im копирует в ту или иную таблицу, но когда я запускаю ее, как показано ниже, она копирует данные только в первую. Могут ли вы, ребята, помочь мне?php multiple mysql inserts

 <?php 

// Pripojenie na databazu s overenim pripojenia 
$con = mysql_connect('localhost:8501' , 'root', ''); 

if(!$con) { 
    die("Nepripojene ".mysql_error()); 
} 

// Vyber databazy ikarus2 s overenim vyberu  
$db = mysql_select_db('ikarus2',$con); 
if(!$db) { 
    die('Ziadny pristup k db ikarus2!'.mysql_error()); 
} 

// MySQL SELECT from pages 
$result = mysql_query('SELECT uid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label,  t3ver_state, t3ver_stage, 
       t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, 
       title, hidden, starttime, endtime, deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, 
       tx_impexp_origuid, tx_realurl_pathsegment, doktype, url, urltype, shortcut, shortcut_mode, t3ver_move_id, sorting, 
       layout, fe_group FROM pages',$con); 


// MySQL INSERT into pages_language_overlay 
while ($row = mysql_fetch_array($result)){ 
$insertoverlay = "INSERT INTO pages_language_overlay(pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, 
         t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, sys_language_uid, title, hidden, starttime, endtime, 
         deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, tx_impexp_origuid, tx_realurl_pathsegment, 
         doktype, url, urltype, shortcut, shortcut_mode) 
      VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]', 
         '$row[9]','$row[10]','$row[11]','$row[12]','5', '$row[13]','$row[14]','$row[15]','$row[16]','$row[17]','$row[18]', 
         '$row[19]','$row[20]','$row[21]','$row[22]','$row[23]','$row[24]','$row[25]','$row[26]','$row[27]','$row[28]', 
         '$row[29]','$row[30]','$row[31]','$row[32]')"; 
mysql_query($insertoverlay,$con); 

} 

// MySQL INSERT into tt_content 
while ($row = mysql_fetch_array($result)){ 
$insertcontent = "INSERT INTO tt_content(pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, t3ver_count, 
t3ver_tstamp, t3ver_move_id, t3_origuid, tstamp, crdate, cruser_id, hidden, sorting, media, layout, 
deleted, starttime, endtime, fe_group, sys_language_uid, tx_impexp_origuid) 
      VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row [4]','$row[5]','$row[6]','$row[7]','$row[8]', 
         '$row[33]','$row[9]','$row[10]','$row[11]','$row[12]','$row[14]','$row[34]','$row[20]','$row[35]','$row[17]', 
         '$row[15]','$row[16]','$row  [36]','5','$row[26]')"; 
mysql_query($insertcontent,$con); 

    } 

?> 
+0

То, что вы, вероятно, хотите, также доступно в простом SQL, вы можете иметь команду вставки, которая работает с выбранным набором результатов. [MySQL INSERT ... SELECT] (http://dev.mysql.com/doc/refman/5.0/en/insert-select.html) – ppeterka

+0

Функции 'mysql_ *' ** больше не поддерживаются ** и должны 't использоваться в любой новой кодовой базе. Он постепенно прекращается в пользу новых API.Вместо этого вы должны использовать [** подготовленные заявления **] (https://www.youtube.com/watch?v=nLinqtCfhKY) с помощью [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/msqli). –

ответ

2

Перед выполнением второй во время цикла, попробуйте использовать mysql_data_seek():

mysql_data_seek($result, 0); 

указателя в $result записях должны быть сброшены в ноль, в противном случае он будет по-прежнему показывает, что это в конце.

ИЛИ

первый магазин все записи в массиве затем сделать Еогеасп, чтобы вставить данные в базу данных

0

я думаю, что несколько while петли будут создавать проблемы. дать этому выстрел

while ($row = mysql_fetch_array($result)){ 

     $insertoverlay = "INSERT INTO pages_language_overlay(pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, 
           t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, sys_language_uid, title, hidden, starttime, endtime, 
           deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, tx_impexp_origuid, tx_realurl_pathsegment, 
           doktype, url, urltype, shortcut, shortcut_mode) 
        VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]', 
           '$row[9]','$row[10]','$row[11]','$row[12]','5', '$row[13]','$row[14]','$row[15]','$row[16]','$row[17]','$row[18]', 
           '$row[19]','$row[20]','$row[21]','$row[22]','$row[23]','$row[24]','$row[25]','$row[26]','$row[27]','$row[28]', 
           '$row[29]','$row[30]','$row[31]','$row[32]')"; 
     mysql_query($insertoverlay,$con); 

$insertcontent = "INSERT INTO tt_content(pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, t3ver_count, 
t3ver_tstamp, t3ver_move_id, t3_origuid, tstamp, crdate, cruser_id, hidden, sorting, media, layout, 
deleted, starttime, endtime, fe_group, sys_language_uid, tx_impexp_origuid) 
      VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row [4]','$row[5]','$row[6]','$row[7]','$row[8]', 
         '$row[33]','$row[9]','$row[10]','$row[11]','$row[12]','$row[14]','$row[34]','$row[20]','$row[35]','$row[17]', 
         '$row[15]','$row[16]','$row  [36]','5','$row[26]')"; 
mysql_query($insertcontent,$con); 

     } 
0

1.- Не используйте mysql_ * функции, являются устаревшими, использование PDO или mysqli_ * функции

2.- Я думаю, что вы не очень хорошо понимают mysql_fetch_array, эта функция возвращает следующую строку данных и перемещает указатель на следующую запись, так, во втором в то время как петля mysql_fetch_array вернется false

таким образом, вы должны выполнить две инструкции вставки в том же в то время как/цикле:

// MySQL INSERT into pages_language_overlay 
while ($row = mysql_fetch_array($result)){ 
$insertoverlay = "INSERT INTO pages_language_overlay(pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, 
         t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, sys_language_uid, title, hidden, starttime, endtime, 
         deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, tx_impexp_origuid, tx_realurl_pathsegment, 
         doktype, url, urltype, shortcut, shortcut_mode) 
      VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]', 
         '$row[9]','$row[10]','$row[11]','$row[12]','5', '$row[13]','$row[14]','$row[15]','$row[16]','$row[17]','$row[18]', 
         '$row[19]','$row[20]','$row[21]','$row[22]','$row[23]','$row[24]','$row[25]','$row[26]','$row[27]','$row[28]', 
         '$row[29]','$row[30]','$row[31]','$row[32]')"; 
mysql_query($insertoverlay,$con); 

$insertcontent = "INSERT INTO tt_content(pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, t3ver_count, 
t3ver_tstamp, t3ver_move_id, t3_origuid, tstamp, crdate, cruser_id, hidden, sorting, media, layout, 
deleted, starttime, endtime, fe_group, sys_language_uid, tx_impexp_origuid) 
      VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row [4]','$row[5]','$row[6]','$row[7]','$row[8]', 
         '$row[33]','$row[9]','$row[10]','$row[11]','$row[12]','$row[14]','$row[34]','$row[20]','$row[35]','$row[17]', 
         '$row[15]','$row[16]','$row  [36]','5','$row[26]')"; 
mysql_query($insertcontent,$con); 

    } 
0

Программа не структурированы. Результирующий набор уже полностью потребляется, когда элемент управления переходит во второй цикл. Вместо этого поместите их в ту же петлю, чтобы решить непосредственную проблему вы имеете:

// MySQL INSERT into pages_language_overlay 
while ($row = mysql_fetch_array($result)){ 
$insertoverlay = "INSERT INTO pages_language_overlay(pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, 
        t3ver_count, t3ver_tstamp, t3_origuid, tstamp, crdate, cruser_id, sys_language_uid, title, hidden, starttime, endtime, 
        deleted, subtitle, nav_title, media, keywords, description, abstract, author, author_email, tx_impexp_origuid, tx_realurl_pathsegment, 
        doktype, url, urltype, shortcut, shortcut_mode) 
     VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row[4]','$row[5]','$row[6]','$row[7]','$row[8]', 
        '$row[9]','$row[10]','$row[11]','$row[12]','5', '$row[13]','$row[14]','$row[15]','$row[16]','$row[17]','$row[18]', 
        '$row[19]','$row[20]','$row[21]','$row[22]','$row[23]','$row[24]','$row[25]','$row[26]','$row[27]','$row[28]', 
        '$row[29]','$row[30]','$row[31]','$row[32]')"; 
mysql_query($insertoverlay,$con); 

$insertcontent = "INSERT INTO tt_content(pid, t3ver_oid, t3ver_id, t3ver_wsid, t3ver_label, t3ver_state, t3ver_stage, t3ver_count, 
t3ver_tstamp, t3ver_move_id, t3_origuid, tstamp, crdate, cruser_id, hidden, sorting, media, layout, 
deleted, starttime, endtime, fe_group, sys_language_uid, tx_impexp_origuid) 
     VALUES ('$row[0]','$row[1]','$row[2]','$row[3]','$row [4]','$row[5]','$row[6]','$row[7]','$row[8]', 
        '$row[33]','$row[9]','$row[10]','$row[11]','$row[12]','$row[14]','$row[34]','$row[20]','$row[35]','$row[17]', 
        '$row[15]','$row[16]','$row  [36]','5','$row[26]')"; 
    mysql_query($insertcontent,$con); 

    } 

?> 
  • Однако то, что вы, вероятно, хотите доступна в простом SQL тоже, вы можете иметь команду вставки, которая работает с выбранным набором результатов ,

MySQL INSERT... SELECT:

INSERT INTO destTable (col1, col2, col3) 
    SELECT srcCol1, srcCol2, srcCol3 FROM srcTable; 

Таким образом, это может быть даже быстрее: данные не нужно ехать на сервер запуска PHP-код и обратно в БД - это обрабатывается БД полностью.

  • Однако также обратите внимание, что mysql_ * функции устаревшим PHP 5.5, так что вы должны серьезно перейти к другим решениям. Я бы рекомендовал использовать PDO.