Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[SOLVED]Copiare dati tra campi stessa tabella MYSQL

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

[SOLVED]Copiare dati tra campi stessa tabella MYSQL

Postdi giuliopowa95 » 25/08/16 09:47

interfaccia utilizzata : phpmyadmin
database : MYSQL versione 5.6.30

Buongiorno a tutti , avrei bisogno di un aiuto con una query sql.
Sono sempre riuscito a risolvere i problemi che avevo con le query sql cercando in questo forum o in altre guide, ma con questo problema non riesco a venirne a capo.

la query che devo creare dovrebbe copiare i dati di una cella in un'altra cella della stessa tabella, avendo come confronto altre 2 celle per determinare in quele cella copirare i dati.

Allego immagine e descrizione con esempio.

Immagine

- dovrei copiare i dati che ci sono della colonna " description_short" nella 5' riga dentro alla cella della colonna "description_short" nella 1' riga. In comune questi dati hanno " id_product" che per tutte e 2 queste righe è 15621 e anche il " id_lang " che è 7. Di diverso hanno " id_shop" che per tutti i dati del database è 6 e 2.

poi dovrei copiare anche gli altri dati nelle altre celle , per esempio i dati della colonna " description_short " nella 7' riga devo copiarli nella 3' riga , e poi i dati sempre della stessa colonna della 8' riga nella 4' riga.

e devo fare questa operazione per tutti gli " id_product" del database e vanno da 0 a 15621.

Grazie e spero in un vostro aiuto . se qualcosa non è chiaro chiedete pure che cercherò di spiegarmi meglio .
giuliopowa95
Newbie
 
Post: 5
Iscritto il: 25/08/16 09:11

Sponsor
 

Postdi archimede » 26/08/16 10:07

Questo mi pare un ottimo esempio del perché è sbagliato duplicare i dati nelle tabelle.

Fossi in te rivedrei il disegno fisico/logico del db.

Per rispondere alla domanda, se ho capito bene quel che vuoi fare, puoi provare (ovviamente fai una COPIA dei dati prima):
Codice: Seleziona tutto
UPDATE tabella AS t1, tabella AS t2
   SET t1.description_short = t2.description_short
 WHERE t2.id_product = t1.id_product
   AND t2.id_lang    = t1.id_lang
   AND t2.description_short is not null
   AND t1.description_short is null;
HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi giuliopowa95 » 26/08/16 10:34

ciao, grazie il codice sembra proprio quello che serve a me , io stavo pensando a tutta unaltra strada :neutral:

però devo aggiungere un'altra condizione , devo far saltare le righe se hanno come "id_shop" = 1

perchè nel database ci sono 3 siti web collegati e 2 di loro possono avere le stesse descrizioni. Ho dovuto fare questa dupliazione di dati perchè non hanno completato tutte le varie lingue di descrizioni da gennaio e quindi mi conviene fare una duplicazione dei dati, anche se non è la cosa più ideale da fare come dici tu.

comunque , aggiungendo questìaltra condizione , il codice può andare bene così ?

Codice: Seleziona tutto

UPDATE ps_product_lang AS t1,
           ps_product_lang AS t2
                     SET t1.description_short = t2.description_short
                                WHERE t2.id_product = t1.id_product
                                AND t2.id_lang    = t1.id_lang
                                AND t2.description_short is not null
                                AND t1.description_short is null
                                AND t2.id_shop != 1;
giuliopowa95
Newbie
 
Post: 5
Iscritto il: 25/08/16 09:11

Postdi archimede » 26/08/16 10:55

giuliopowa95 ha scritto:devo far saltare le righe se hanno come "id_shop" = 1
Saltare quelle di origine? Di destinazione? Entrambe?

Dovrai adattare la WHERE a seconda della risposta.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi giuliopowa95 » 26/08/16 11:09

devo far saltare sia quelle di origine sia quelle di destinazione ( oppure solo quelle di origine ) , così non si sovrascrivono le descrizioni.

in pratica ogni id_product ha 4 lingue diverse id_lang (1 , 3 , 6 e 7) e 3 negozi diversi id_store ( 1,2 e 6 )

devo copiare le descrizioni del id_store 2 in quelle del id_store 6 . e tutte le righe con id_store 1 devo lasciarle così come sono
giuliopowa95
Newbie
 
Post: 5
Iscritto il: 25/08/16 09:11

Postdi archimede » 26/08/16 11:21

Codice: Seleziona tutto
UPDATE ps_product_lang AS t1, ps_product_lang AS t2
   SET t1.description_short = t2.description_short
 WHERE t2.id_product = t1.id_product
   AND t2.id_lang    = t1.id_lang
   AND t2.id_shop   != 1
   AND t1.id_shop   != 1
   AND t2.description_short is not null
   AND t1.description_short is null;
Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi giuliopowa95 » 26/08/16 11:40

perfetto grazie mille , problema risolto :)

però alla fine ho mandato questa query

Codice: Seleziona tutto
UPDATE ps_product_lang AS t1, ps_product_lang AS t2
   SET t1.description_short = t2.description_short
 WHERE t2.id_product = t1.id_product
   AND t2.id_lang    = t1.id_lang
   AND t2.id_shop   != 1
   AND t1.id_shop   != 1;


perchè se no non modificava nessuna riga
giuliopowa95
Newbie
 
Post: 5
Iscritto il: 25/08/16 09:11

Postdi archimede » 26/08/16 11:50

Strano, forse quelle righe contenevano spazi in quel campo invece di null?

Comunque se hai risolto tanto meglio.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi giuliopowa95 » 26/08/16 13:19

probabilmente si crea un paragrafo con uno spazio vuoto , tipo <p> </p>

Grazie mille :)
ps: non riesco a mettere [solved] nel titolo del post
giuliopowa95
Newbie
 
Post: 5
Iscritto il: 25/08/16 09:11


Torna a Programmazione


Topic correlati a "[SOLVED]Copiare dati tra campi stessa tabella MYSQL":


Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti