Recupero dati da una tabella e spostarli in un altra

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

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciao a tutti,
ho la necessità di spostare dei dati da una tabella ad un altra. Mi spiego meglio... Ho fatto una pagina per lac reazione di DdT, finqui tutto ok...
Uso dei campi standard piu : Numero_Doc,Transazione,Data. Poi ho una tabella Transazioni, dove memorizzo tutto il corpo del documento generato, quindi i classici campi, barcode, prezzo, quantita etc...

Quello che dovrei fare io è abbastanza semplice, arrivo da una pagina in cui metto numero documento e data. A questo punto devo far comparire a video il numero della transazione.
Primo problema, io le date le salvo col comando now(), per cui sono in formato USA ossia :

Codice:
2013-10-25 19:15:31

Mentre l'utente inserisce la data nel formata d/mm/Y compreso di slash.
Come faccio a farla diventare comparabile con quel campo?

Una volta trovata la transazione, devo far inserire di seguito, data doc, numero doc e transazione che ho appena creato (o forse lo posso passare io come dato?

Effettuata la selezione della transazione di quel documento devo prendere TUTTI i dati con numero di transazione X e trasferirlo come carico in un altra tabella di nome articoli (i campi sono i medesimi)

Grazie a chiunque mi aiuterà.
 
ciao
intanto se vuoi trasformare la data da formato italiano d-m-Y a formato USA Y-m-d H:i:s
puoi usarequesta funzione
PHP:
<?php
//2013-10-25 19:15:31
function trasf_it_usa($d){
	//LA DATA DEVE ESSERE IN FORMATO d m Y (anno mese giorno) con o senza H i s
    //è indipendente dagli usuali separatori
    //riduco la data ad un solo separatore
    $pat=array('/ /','/\//','/:/','/\./');//separatori più comuni
    $d=preg_replace($pat, '-', $d);
	$e=explode("-",$d);
	//verifico che la data sia corretta
	if(!checkdate($e[1],$e[0],$e[2])){
        return false;
    } 
	//verifico se esistono anche ore o minuti o secondi
	if(!isset($e[3]) || ($e[3]<0 || $e[3]>23)){$e[3]=0;}//le ore vanno da 0 a 23
    if(!isset($e[4]) || ($e[4]<0 || $e[4]>59)){$e[4]=0;}//i minuti primi da 0 a 59
    if(!isset($e[5]) || ($e[5]<0 || $e[5]>59)){$e[5]=0;}//i minuti secondi da 0 a 59
	//ricostruisco e ritorno in
	return $e[2]."-".$e[1]."-".$e[0]." ".$e[3].":".$e[4].":".$e[5];
}
//****TEST*****
$date_prova=array('10.12/2013 5:10:33','10-12-2013 5:10:33','10-12-2013','31.02/2013 5:10:33','10.12/2013 66:10:88');
foreach($date_prova as $data_prova){
	$data_usa=trasf_it_usa($data_prova);
	if($data_usa){
		echo "$data_prova trasformata in formato USA $data_usa<br />";
	}else{
		echo "$data_prova NON corretta<br />";
	}
}
?>
 
bhè si prima quindi leggo il post dei dati, lo trasformo e lo vado a verificare nel DB, fin qui ok, ora manca la aprte dell'auto inserimento.. Puoi aiutarmi?
 
ciao
nei limiti del possibile.
comunque devi spiegare meglio, ti dico quello che ho capito.
1) pinco inserisce una data
2) estrae tutte le transazioni con quella data
3) seleziona una transazione tra quelle estratte
della transazione selezionata fanno parte dei documenti (?)
cosa intendi per dare il numero di documento e di transazione, non sono già a db?
cosa contiene il/i record estratto/i ? come è fatta e cosa contiene la tabella delle transazioni?
4) cosa deve essere trasferito? è un'insert o un uppdate?
 
ciao
nei limiti del possibile.
comunque devi spiegare meglio, ti dico quello che ho capito.
1) pinco inserisce una data
2) estrae tutte le transazioni con quella data
3) seleziona una transazione tra quelle estratte
della transazione selezionata fanno parte dei documenti (?)
cosa intendi per dare il numero di documento e di transazione, non sono già a db?
cosa contiene il/i record estratto/i ? come è fatta e cosa contiene la tabella delle transazioni?
4) cosa deve essere trasferito? è un'insert o un uppdate?

Ciao, innanzitutto grazie... Per rispondere vado a punti :

1 - Pinco inserisce una data e un numero di documento (facendo riferimento ad un DDT precedentemente stampato).
2 - Una volta inserite cerco con numero documento e data il numero della transazione (questo passaggio tecnicamente è possibile saltarlo.. Nel senso che il numero di transazione serve solamente a selezionare tutte le informazioni da estrarre con quella transazione.
3 - I dati da estrarre sono i medesimi da inserire... E vanno inseriti tramite INSERT e non UPDATE, perchè sono "nuovi",
4 - Vedi sopra.

La tabella DDT è la seguente:

ddt.jpg

Mentre la tabella delle Transazioni è la seguente :

transazioni.jpg

Dall'ultima tabella bisogna recuperare le informazioni (non tutte) e trasferirle in un altra tabella di nome articoli.

Spero di essere stato più chiaro....
 
ciao
allora se non ho capito male
la tabella ddt e la transazioni sono legate dal campo transazione giusto?
se è così: tu hai una data e un numero di documento
PHP:
<?php
//....
$data=$_POST['data'];// trattata con la funzione che ti ho postato
$num_doc=$_POST['documento'];
//verifiche se sono corretti, se no riinvii dove vuoi
$query_1="SELECT transazione FROM ddt WHERE data='$data' AND numero_doc='$num_doc'";
$ris_1=mysql_query($query_1);
//verifichi che eissta o meno se si
$riga=mysql_fetch_array($ris_1);
$transazione=$riga['transazione'];
//e estrai dalla transazione quello che ti serve es ne metto due)
$query_2="SELECT barcode, quantita FROM transazioni WHERE transazione='$transazione'";
$ris_2=mysql_uqry($query_2);
//e qui mi fermo perche non so
//se possono essere  uno o più e dove vuoi metterli
//...
?>
le due select ppotrebbero essere fatte con una join pero devo pensarci un poco
 
ciao
allora se non ho capito male
la tabella ddt e la transazioni sono legate dal campo transazione giusto?
se è così: tu hai una data e un numero di documento
PHP:
<?php
//....
$data=$_POST['data'];// trattata con la funzione che ti ho postato
$num_doc=$_POST['documento'];
//verifiche se sono corretti, se no riinvii dove vuoi
$query_1="SELECT transazione FROM ddt WHERE data='$data' AND numero_doc='$num_doc'";
$ris_1=mysql_query($query_1);
//verifichi che eissta o meno se si
$riga=mysql_fetch_array($ris_1);
$transazione=$riga['transazione'];
//e estrai dalla transazione quello che ti serve es ne metto due)
$query_2="SELECT barcode, quantita FROM transazioni WHERE transazione='$transazione'";
$ris_2=mysql_uqry($query_2);
//e qui mi fermo perche non so
//se possono essere  uno o più e dove vuoi metterli
//...
?>
le due select ppotrebbero essere fatte con una join pero devo pensarci un poco


Ciao,
si esatto, ma non è così dura come sembra... inoltre la select è una.. visto che bisogna semplicemente "copiare" quello che c'è nella tabella transazioni con la determinata condizione (numero_doc,transazione e data) e spostarlo nella tabella articoli. niente piu.
 
ciao
anche se non capisco a che ti serva
PHP:
<?php
//.......
//e estrai dalla transazione quello che ti serve (es ne metto due ma tu estrrari quelli che ti servono)
$query_2="SELECT barcode, quantita FROM transazioni WHERE transazione='$transazione'";
$ris_2=mysql_uqry($query_2);
while($riga=mysql_fetch_array($ris_2)){
	$bar=$riga['barcode'];
	$qua=$riga['quantita'];
	$query_3="INSERT INTO articoli(barcode, quantita) VALUES('$bar','$qua')";
	$ris_3=mysql_fetch_array($query_3);
}
//....
?>
con questo sistema non fai certo una gestione di magazzino
io farei così se si tratta di gestire un magazzino
PHP:
<?php
//.......
//e estrai dalla transazione quello che ti serve (es ne metto due ma tu estrrari quelli che ti servono)
$query_2="SELECT barcode, quantita FROM transazioni WHERE transazione='$transazione'";
$ris_2=mysql_uqry($query_2);
while($riga=mysql_fetch_array($ris_2)){
	$bar=$riga['barcode'];
	$qua=$riga['quantita'];
	$query_3="INSERT INTO articoli(barcode, quantita) VALUES('$bar','$qua')
		ON DUPLICATE KEY
		UPDATE quantita = quantita + $qua,";
		/*cioè se non esiste lo inserisce (anche se secondo me dovrebbe esistere altrimenti da dove prendi tutti i dati dell'articolo?, 
                   se esiste aggiorna la quantità (a te sapere se in più o meno)*/
//...
?>
 
ciao
anche se non capisco a che ti serva
PHP:
<?php
//.......
//e estrai dalla transazione quello che ti serve (es ne metto due ma tu estrrari quelli che ti servono)
$query_2="SELECT barcode, quantita FROM transazioni WHERE transazione='$transazione'";
$ris_2=mysql_uqry($query_2);
while($riga=mysql_fetch_array($ris_2)){
	$bar=$riga['barcode'];
	$qua=$riga['quantita'];
	$query_3="INSERT INTO articoli(barcode, quantita) VALUES('$bar','$qua')";
	$ris_3=mysql_fetch_array($query_3);
}
//....
?>
con questo sistema non fai certo una gestione di magazzino
io farei così se si tratta di gestire un magazzino
PHP:
<?php
//.......
//e estrai dalla transazione quello che ti serve (es ne metto due ma tu estrrari quelli che ti servono)
$query_2="SELECT barcode, quantita FROM transazioni WHERE transazione='$transazione'";
$ris_2=mysql_uqry($query_2);
while($riga=mysql_fetch_array($ris_2)){
	$bar=$riga['barcode'];
	$qua=$riga['quantita'];
	$query_3="INSERT INTO articoli(barcode, quantita) VALUES('$bar','$qua')
		ON DUPLICATE KEY
		UPDATE quantita = quantita + $qua,";
		/*cioè se non esiste lo inserisce (anche se secondo me dovrebbe esistere altrimenti da dove prendi tutti i dati dell'articolo?, 
                   se esiste aggiorna la quantità (a te sapere se in più o meno)*/
//...
?>
Hai pienamente ragione ma la tabella Articoli e quella della Transazioni sono medesime... Solamente che la tabella Transazioni si riempie eseguendo dei documenti, nel caso specifico quello a cui serve questa funzione, è fare un DDT normalmente, quindi prendo i dati li recupero dal DB articoli (vecchio) salvo le 6\7 voci che mi servono, stampo il ddt in formato pdf e popolo il DB Transazioni, inserendo le 6\7 cose che uso più il numero della transazione stessa. In questa maniera l'utente che deve caricare i prodotti in magazzino non fa altro che inserire il numero del documento, la data ed in automatico si caricherà tutti gli articoli nel DB articoli(nuovo).
Per chè questa cosa? perchè il DB vecchio degli articoli è quello del negozio A e a me serve popolare ex novo il DB del negozio B.
Chiaramente una volta effettuato il primo carico, si userà la seconda sintassi che hai scritto te, quindi se esiste faccio l'update della quantità e stop.

Provo quello che hai scritto te e ti faccio sapere...
 
borgo, sto provando ad effettuare il carico ma ho un problema... Se il campo del db è di tipo datetime, quindi salva anche ore minuti e secondi, ma ovviamente nel documento non c'è scritto, come la posso confrontare?

Cerco di spiegarmi meglio, nel db ho il campo data cosi : 2013-10-24 16:31:36
Mentre nella schermata di ricerca inserisco solo : 24/10/2013

La tua funzione la converte bene, ma non mi da ore, minuti e secondi chiaramente.. Non me lo da perche ovviamente l'utente non lo inserisce... e mi restituisce 0:0:0
 
ho cambiato il campo in date e stop, mi ha troncato la parte dei minuti secondi etc, ma ora quando faccio la query con la data giusta mi dice : Incorrect data value: '1978' for column 'data' at row 1, ma io come ricerca inserisco 2013-10-25, come è possibile?
 

Discussioni simili