Recuperare dati da una tabella e passarli ad un altra

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

Emix

Utente Attivo
15 Feb 2010
596
0
16
Salve a tutti,
Io ho una database univoco con due tabelle magazzino e articoli.... dovrei prendere alcuni campi della tabella magazzino con tutti i record e spostarli sulla tabella articoli nei medesimi campi (si chiamano alla stessa maniera... Ovviamente deve essere una copia 1:1 ma con alcuni campi solamente... Che query dovrei utilizzare? Chiaramente il db è in mysql....
 
ciao
scusa non capisco bene, tu hai due tabelle (es)
Codice:
magazzino
id
campo_1
campo_2
ecc...
campo_80

Codice:
articoli
id
campo_1
campo_2
ecc..
campo_20

la tabella articoli è vuota? e devi riempirla?
se è così è abbastanza semplice
PHP:
<?php
//dati di connessione
$q_1=mysql_query("SELECT * FROM magazzino ORDER BY id");
while($riga=mysql_fetch_array($q_1)){
	//qui estrai i campi che vuoi passare a articoli (mi limito a due)
	$campo_10=$riga['campo_10'];
	$campo_19=$riga['campo_19'];
	//e fai l'insert
	$q_2 = mysql_query("INSERT INTO articoli(campo_10, campo_19) VALUES('$campo_10','$campo_19')");
}
//....
?>
 
ciao, e grazie per le risposte... Cmq ho appena fatto come scritto da te ma mi restituisce un errore...
Il codice è il seguente :

PHP:
//dati di connessione
$q_1=mysql_query("SELECT * FROM test_prefixMagazzino ORDER BY codice");
while($riga=mysql_fetch_array($q_1)){
    //qui estrai i campi che vuoi passare a articoli (mi limito a due)
    $campo_1=$riga['Codice Articolo'];
    $campo_2=$riga['CodiceInterno'];
	$campo_3=$riga['Fornitore'];
	$campo_4=$riga['Codice'];
	$campo_5=$riga['Descrizione'];
	$campo_6=$riga['Reparto'];
	$campo_7=$riga['Sotto Reparto'];
	$campo_8=$riga['Codice a Barre'];
	$campo_9=$riga['UM'];
	$campo_10=$riga['Listino Fornitore'];
	$campo_11=$riga['IVA'];
	$campo_12=$riga['Acquisto'];
	$campo_13=$riga['Acquisto non ivato'];
	$campo_14=$riga['Vendita'];
	$campo_15=$riga['Vendita non ivato'];
    //e fai l'insert
    $q_2 = mysql_query("INSERT INTO articoli(Codice Articolo,CodiceInterno,Fornitore,Codice,Descrizione,Reparto,Sotto Reparto,Codice a Barre,UM,Listino Fornitore,IVA,Acquisto,Acquisto non ivato,Vendita,Vendita non ivato) VALUES('$campo_1','$campo_2','$campo_3','$campo_4','$campo_5','$campo_6','$campo_7','$campo_8','$campo_9','$campo_10','$campo_11','$campo_12','$campo_13','$campo_14','$campo_15')");
}

Mentre l'errore che viene generato è il seguete :

Warning: mysql_connect() [function.mysql-connect]: Lost connection to MySQL server at 'reading initial communication packet', system error: 110 in /home/laviadellanima.com/public_html/Gestionale_Dreamweaver/query_riempi_magazzino.php on line 17
Errore nella connessione.


Inutile dire che in realtà i dati di connessione sono perfettamente funzionanti...

Aggiungo che le prove le sto facendo su altervista e che i record nella tabella sono circa 3200.....
 
ciao
guarda che l'errore non è nello script che hai fatto, ma nella connessione, verifica le variabili di connessione

PHP:
<?php

$conn = mysql_connect($host,$username,$password) or die (mysql_error());
$sel = mysql_select_db($db) or die (mysql_error());

?>
 
Ho sistemato la connessione come la hai scritta te (anche se era giusta anche l'altra) ma ottengo lo stesso errore... Ti posto la pagina intera:

PHP:
 //definisco i parametri della connessione: nomeserver,username,password e nome db
$server="adminteclis.altervista.org";
$username="adminteclis";
$password="++++++++";
$db=" my_adminteclis";
$admin_email = "[email protected]";
//mi connetto al server mysql
$conn = mysql_connect($server,$username,$password) or die (mysql_error());
$sel = mysql_select_db($db) or die (mysql_error());
//mi connetto al database specificato nella variabile $nomedb
//dati di connessione
$q_1=mysql_query("SELECT * FROM test_prefixMagazzino ORDER BY codice");
while($riga=mysql_fetch_array($q_1)){
    //qui estrai i campi che vuoi passare a articoli (mi limito a due)
    $campo_1=$riga['Codice Articolo'];
    $campo_2=$riga['CodiceInterno'];
	$campo_3=$riga['Fornitore'];
	$campo_4=$riga['Codice'];
	$campo_5=$riga['Descrizione'];
	$campo_6=$riga['Reparto'];
	$campo_7=$riga['Sotto Reparto'];
	$campo_8=$riga['Codice a Barre'];
	$campo_9=$riga['UM'];
	$campo_10=$riga['Listino Fornitore'];
	$campo_11=$riga['IVA'];
	$campo_12=$riga['Acquisto'];
	$campo_13=$riga['Acquisto non ivato'];
	$campo_14=$riga['Vendita'];
	$campo_15=$riga['Vendita non ivato'];
    //e fai l'insert
    $q_2 = mysql_query("INSERT INTO articoli(Codice Articolo,CodiceInterno,Fornitore,Codice,Descrizione,Reparto,Sotto Reparto,Codice a Barre,UM,Listino Fornitore,IVA,Acquisto,Acquisto non ivato,Vendita,Vendita non ivato) VALUES('$campo_1','$campo_2','$campo_3','$campo_4','$campo_5','$campo_6','$campo_7','$campo_8','$campo_9','$campo_10','$campo_11','$campo_12','$campo_13','$campo_14','$campo_15')");
}
//....
 
niente.. non riesco... non vorrei che fossero troppi 3200 record da processare??:crying:
 
ciao
o li processi un po alla volta o metti in cima allo script
PHP:
<?php
set_time_limit(240);//dove 240 (che puoi provare ad aumentare) sono il tempo di vita dello script
//....
?>
questo perche il tempo di vita di uno script è di default 30 sec e 3200 record sono molti

p.s.
non so però se il tuo host lo permette
 
uhm.... stasera provo... altrimenti posso fare diversamente? devo fare in modo che riesco a riempire la tabella articoli tramite la tabella prefix_magazzino... per forza...
 
ciao
guarda che è solo un'idea tutta da verificare

ti fai una tabella di appoggio (chiamata es. ultimo) perchè devi "ricordarti" l'ultimo inserito
Codice:
id int(3) primarykey
ultimo in(12)
PHP:
<?php
//dati di connessione
$q=mysql_query("SELECT ultimo FROM ultimo WHERE id=1");
if(mysql_num_rows($q)==0){
	$ultimo=0;
}else{
	$r=mysql_fetch_array($q);
	$ultimo =$riga['ultimo'];
}
//selezioni 100 record con id (cone si chiama?) maggiore di ultimo
//vedi tu se il limit può essere es 200 o il massimo che ti sembra di poter usare senza che lo script si pianti
$q_1=mysql_query("SELECT * FROM test_prefixMagazzino WHERE id > $ultimo ORDER BY id LIMIT 100");
//nel while oltre al resto metti
$per_ultimo=array();
while($riga=mysql_fetch_array($q_1)){
    $per_ultimo[]=$riga['id'];//verifica come l'hai chiamato
	//qui estrai i campi che vuoi passare a articoli (mi limito a due)
    $campo_1=$riga['Codice Articolo']; 
	//ecc.......
	
}
//trovi l'ultimo id che hai estratto dalla tabella di partenza
$u=max($per_ultimo);
//uppi la tabella di appoggio
$qu_app=mysql_query("UPDATE ultimo SET ultimo=$u WHERE id=1");
?>
lanciando lo script diverse volte dovresti riuscire a trasferire
gurada che devi verificare i nomi perche non so come hai chiamato l'id nella tabella di partenza

p.s.
prima di usarlo verifica che la tabella di arrivo sia vuota
 
uhm... non ho ben capito ma provo... In ogni caso.. ci sono altre maniere? sql server installato sul pc? phpmyadmin? fare queste cose in locale con easyphp o altri applicativi cambierebbe?
 
io un alternativa tel'avevo linkata
cmq ti basta una semplice query
Codice:
INSERT INTO tabella2 (
SELECT campo1,campo2,campo3,campo4 FROM tabella1
)
i nomi dei campi che prelevi dalla tabella 1 devono essere uguali a quelli della tabella 2 altrimenti dovrai usare un alias
Codice:
campo1 as nuovocampo1
se hai un campo INCREMENT dovrai assegnargli NULL
 
ma cosi sarebbe come abbiamo fatto sopra in php... sempre 3200 record sono.. e si inchioda restituendo errore...
 
no è completamente diverso
posta l'errore
 
dovrebbe voler dire che ti manca un nome di un campo o ne hai uno in piu
i campi che richiami nella select devono essere precisi ai campi dove vuoi fare l'insert
 
no nessun campo manca...
la query è la seguente :

PHP:
INSERT INTO articoli (
SELECT ('[Codice Articolo]','CodiceInterno','Fornitore','Codice','Descrizione','Reparto',' [Sotto Reparto]','[Codice a Barre]','UM','[Listino Fornitore]','IVA','Acquisto','[Acquisto non ivato]','[Vendita non ivato]') FROM test_prefixMagazzino
)

la tabella articoli è cosi :

PHP:
CREATE TABLE IF NOT EXISTS `articoli` (
  `Codice Articolo` varchar(100) DEFAULT NULL,
  `CodiceInterno` int(11) NOT NULL DEFAULT '0',
  `Fornitore` varchar(50) NOT NULL,
  `Codice` varchar(30) NOT NULL,
  `Descrizione` varchar(200) NOT NULL,
  `Reparto` varchar(4) NOT NULL,
  `Sotto Reparto` varchar(4) NOT NULL,
  `Codice a Barre` varchar(50) NOT NULL,
  `UM` varchar(2) NOT NULL,
  `Listino Fornitore` double NOT NULL DEFAULT '0',
  `IVA` tinyint(4) NOT NULL DEFAULT '0',
  `Acquisto` double NOT NULL DEFAULT '0',
  `Acquisto non ivato` double NOT NULL DEFAULT '0',
  `Vendita` double NOT NULL DEFAULT '0',
  `Vendita non ivato` double NOT NULL DEFAULT '0',
  PRIMARY KEY (`CodiceInterno`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;


mentre quella originale da cui copiare è cosi:

PHP:
CREATE TABLE IF NOT EXISTS `test_prefixMagazzino` (
  `Codice Articolo` varchar(100) DEFAULT NULL,
  `CodiceInterno` int(11) NOT NULL DEFAULT '0',
  `Codice Fornitore` int(11) DEFAULT '0',
  `Fornitore` varchar(50) DEFAULT NULL,
  `Codice Colore` int(11) DEFAULT '0',
  `Colore` varchar(50) DEFAULT NULL,
  `Codice` varchar(30) DEFAULT NULL,
  `Descrizione` varchar(200) DEFAULT NULL,
  `Descrizione aggiuntiva` longtext,
  `Descrizione in lingua 1` varchar(200) DEFAULT NULL,
  `Descrizione in lingua 2` varchar(200) DEFAULT NULL,
  `Reparto` varchar(4) DEFAULT NULL,
  `Sotto Reparto` varchar(4) DEFAULT NULL,
  `Linea` varchar(50) DEFAULT NULL,
  `Note` longtext,
  `Note riservate` longtext,
  `Codice a Barre` varchar(50) DEFAULT NULL,
  `Immagine` varchar(200) DEFAULT NULL,
  `Libero1` varchar(200) DEFAULT NULL,
  `Libero2` varchar(200) DEFAULT NULL,
  `Libero3` varchar(200) DEFAULT NULL,
  `Libero4` varchar(200) DEFAULT NULL,
  `Libero5` varchar(200) DEFAULT NULL,
  `Libero6` varchar(200) DEFAULT NULL,
  `Libero7` varchar(200) DEFAULT NULL,
  `Libero8` varchar(200) DEFAULT NULL,
  `Ubicazione` varchar(100) DEFAULT NULL,
  `Peso` double DEFAULT '0',
  `Peso netto` double DEFAULT '0',
  `Pezzi per Collo` double DEFAULT '0',
  `Scorta minima` double DEFAULT '0',
  `Quantità Minima Riordinabile` double DEFAULT '0',
  `Offerta` tinyint(4) DEFAULT '0',
  `Data Inizio Offerta` datetime DEFAULT NULL,
  `Data Fine Offerta` datetime DEFAULT NULL,
  `Prezzo in Offerta` double DEFAULT '0',
  `Provvigione` double DEFAULT '0',
  `Non stampare su inventario` tinyint(1) DEFAULT '0',
  `Non stampare su giornale` tinyint(1) DEFAULT '0',
  `Non movimentare` tinyint(1) DEFAULT '0',
  `Articolo da pubblicare` tinyint(1) DEFAULT '0',
  `Articolo da inviare a bilancia` tinyint(1) DEFAULT '0',
  `Tracciabilità` tinyint(1) DEFAULT '0',
  `Codice PLU` int(11) DEFAULT '0',
  `Codice tastiera` int(11) DEFAULT '0',
  `Codice banco` int(11) DEFAULT '0',
  `Layout` tinyint(4) DEFAULT '0',
  `Uniscreen` tinyint(4) DEFAULT '0',
  `Giorni scadenza` int(11) DEFAULT '0',
  `Giorni stagionatura` int(11) DEFAULT '0',
  `Ricette` int(11) DEFAULT '0',
  `Glassatura` int(11) DEFAULT '0',
  `Disegno` int(11) DEFAULT '0',
  `Tara` double DEFAULT '0',
  `UM` varchar(2) DEFAULT NULL,
  `Listino Fornitore` double DEFAULT '0',
  `Sconto 1` double DEFAULT '0',
  `Sconto 2` double DEFAULT '0',
  `Sconto 3` double DEFAULT '0',
  `IVA` tinyint(4) DEFAULT '0',
  `Acquisto` double DEFAULT '0',
  `Acquisto non ivato` double DEFAULT '0',
  `Vendita` double DEFAULT '0',
  `Vendita non ivato` double DEFAULT '0',
  `Vendita2` double DEFAULT '0',
  `Vendita2 non ivato` double DEFAULT '0',
  `Vendita3` double DEFAULT '0',
  `Vendita3 non ivato` double DEFAULT '0',
  `Vendita4` double DEFAULT '0',
  `Vendita4 non ivato` double DEFAULT '0',
  `Vendita5` double DEFAULT '0',
  `Vendita5 non ivato` double DEFAULT '0',
  `Vendita6` double DEFAULT '0',
  `Vendita6 non ivato` double DEFAULT '0',
  `Vendita7` double DEFAULT '0',
  `Vendita7 non ivato` double DEFAULT '0',
  `Vendita8` double DEFAULT '0',
  `Vendita8 non ivato` double DEFAULT '0',
  `Vendita9` double DEFAULT '0',
  `Vendita9 non ivato` double DEFAULT '0',
  `Vendita10` double DEFAULT '0',
  `Vendita10 non ivato` double DEFAULT '0',
  `Tipo Articolo` varchar(1) DEFAULT NULL,
  `L1` varchar(50) DEFAULT NULL,
  `L2` double DEFAULT '0',
  `L3` double DEFAULT '0',
  `L4` datetime DEFAULT NULL,
  `L5` tinyint(1) DEFAULT '0',
  `L6` tinyint(1) DEFAULT '0',
  `Stato` tinyint(4) DEFAULT '0',
  `Stato trasmissione` tinyint(4) DEFAULT '0',
  `Data Aggiornamento` datetime DEFAULT NULL,
  `Utente` varchar(50) DEFAULT NULL,
  `Immagine tasto` varchar(200) DEFAULT NULL,
  `PLU tasto` int(11) DEFAULT '0',
  `Descrizione tasto` varchar(50) DEFAULT NULL,
  `Colore tasto` int(11) DEFAULT '0',
  `Stampante associata` tinyint(4) DEFAULT '0',
  `Aspetto` int(11) DEFAULT '0',
  `Cauzione` int(11) DEFAULT '0',
  `UM Fiscale` varchar(2) DEFAULT NULL,
  `Origine` varchar(50) DEFAULT NULL,
  `Calibro` varchar(10) DEFAULT NULL,
  `Categoria` varchar(10) DEFAULT NULL,
  `Tipo frontalino` varchar(50) DEFAULT NULL,
  `Prezzo bloccato` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`CodiceInterno`),
  UNIQUE KEY `CodiceInterno` (`CodiceInterno`),
  KEY `Codice` (`Codice`),
  KEY `Codice Articolo` (`Codice Articolo`),
  KEY `Codice a Barre` (`Codice a Barre`),
  KEY `Codice PLU` (`Codice PLU`),
  KEY `Descrizione` (`Descrizione`),
  KEY `Reparto` (`Reparto`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
copiala e incollala cosi nel SQL di phpmyadmin
Codice:
INSERT INTO articoli (
SELECT `Codice Articolo`,CodiceInterno,Fornitore,Codice,Descrizione,Reparto,`Sotto Reparto`,`Codice a Barre`,UM,`Listino Fornitore`,IVA,Acquisto,`Acquisto non ivato`,Vendita,`Vendita non ivato` 
FROM test_prefixMagazzino
)
mancava il campo "Vendita"
 

Discussioni simili