Come fare n INSERT INTO?

Ciao a tutti ,

ho la necessità di trsferire dei record da un db all'altro secondo un campo chiave.

ho fatto una select sul vecchio db, poi tramite while estraggo "tutti" i record che mi interessano...

il problema è quando vado a fare l'INSERTT INTO...in pratica mi inserisce solo il primo record e non tutti quelli estratti (magari 10 righe)!

come posso fare?

grazie

il codice per ora è questo:

<?php
$host= "127.0.0.1";
$user= "root";
$password= "";
$db= "veccio_db";

$ID=$HTTP_POST_VARS["ID"];
mysql_connect($host,$user,$password);

mysql_select_db("$db");

print ("");

$dati = mysql_query ("select pc_topics.author, pc_topics.title, pc_topics.text, pc_topics.date from pc_topics WHERE id=$ID");    

While ( $array = mysql_fetch_array($dati) ){

$title= $array[title];
$author= $array[author];
$text= $array[text];
$date = $array[date];




}


$host= "127.0.0.1";
$user= "root";
$password= "";
$db2= "nuovo_db";




$ID=$HTTP_POST_VARS["ID"]+10000; 

mysql_connect($host,$user,$password);

mysql_select_db("$db2");
$query = "INSERT INTO pc_topics (id,author,title,text, forum, date) VALUES ('$ID,'$author','$title','$text','9','$date')";
$result = @mysql_query ($query) or die("Errore:".mysql_error());

?>
inviato 10 anni fa
yusizu
modificato 10 anni fa
X 0 X

Perchè se hai più righe devi fare più insert, non puoi buttare tutto in una volta. Inoltre alla fine del tuo ciclo while hai solo un record nelle tue variabili.

Hai 2 alternative:

1 - metti tutti i record in array e poi con il secondo ciclo sugli array inserisci nel db

2 - inserisci ogni riga che estrai in un unico ciclo.

Scegli tu, poi se vuoi una mano....

risposto 10 anni fa
LonelyWolf
X 0 X

..certo che vorrei un amano... :)

ovviamente vorrei "buttare tutto in una volta" ma sono diversi record contenuti in diverse righe della tabella,

e devo reinserirli nel nuovo db così come sono nel vecchio (insomma un buon backup!)

..difatti con phpmyadmin ho provato a fare un'esportazione e, nel codice ho tanti INSERT quanti sono i record...

Con il codice postato e come se mi facesse solo un INSERT INTO...credo l'ultimo in ordine,

mi posteresti un pò di codice?

grazie mille

risposto 10 anni fa
yusizu
modificato 10 anni fa
X 0 X

Per non stravolgere troppo il tuo codice ho fatto 2 cicli, cmq un consiglio +commenti e + ordine! :D

<?php
$host= "127.0.0.1";
$user= "root";
$password= "";
$db= "veccio_db";

$title= array();
$author= array();
$text= array();
$date = array();
$i = 0;

$ID=$HTTP_POST_VARS["ID"];
$connessione = mysql_connect($host,$user,$password);

mysql_select_db("$db");

$dati = mysql_query ("select pc_topics.author, pc_topics.title, pc_topics.text, pc_topics.date from pc_topics WHERE id=$ID",$connessione);    

While ( $array = mysql_fetch_array($dati) ){
  $title[$i] = $array[title];
  $author[$i] = $array[author];
  $text[$i] = $array[text];
  $date[$i] = $array[date];
  $i++;
}



$ID=$HTTP_POST_VARS["ID"]+10000; 
$host= "127.0.0.1";
$user= "root";
$password= "";
$db= "veccio_db";
$db2= "nuovo_db";

$connessione = mysql_connect($host,$user,$password);

mysql_select_db("$db2");
for ($i=0;$i<count($title);$i++) {
  $query = "INSERT INTO pc_topics (id,author,title,text, forum, date) VALUES ('$ID,'$author[$i]','$title[$i]','$text[$i]','9','$date[$i]')";
  $result = @mysql_query ($query,$connessione) or die("Errore:".mysql_error());
}
?>
risposto 10 anni fa
LonelyWolf
X 0 X

 O0  Perfetto!

...è inutile più mi rendo conto di quanto sia importante l'uso del for...meno riesco a memorizzarlo!

Grazie mille e scusa per la confusione...in effetti era scritto con i piedi, lo avevo appena buttato giù.

 :bye: ;)

risposto 10 anni fa
yusizu
X 0 X

P.S una sottigliezza:

non c'è un modo per inserirli seguendo un preciso ordine , dal primo all'ultimo?

no, perchè ora mi ritrovo l'ordine invertito (dall'ultimo al primo).

risposto 10 anni fa
yusizu
X 0 X

Così come l'ho scritto li inserisce nello stesso ordine in cui li preleva.

risposto 10 anni fa
LonelyWolf
X 0 X

no, niente risolto, ho aggiunto un order by date DESC quando faccio la SELECT....e funziona

 :bye: e grazie ancora!

risposto 10 anni fa
yusizu
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda