[solved]Copiare dati tra campi della stessa tabella Query MYSQL

di il
9 risposte

[solved]Copiare dati tra campi della stessa tabella Query MYSQL

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 quale cella copiare i dati.

Allego immagine e descrizione con esempio.



- 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.

9 Risposte

  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    Quindi?
    Cosa ti aspetti da noi del forum?
  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    E' un paio di giorni che non riesco a trovare una soluzione a questo problema e , in pratica non riesco a scrivere una query che mi risolva il problema .
    Quindi ho scritto qui per vedere se qualcuno di esperto nella sintassi e linguaggio sql riesce a risolvermi questo problema.
  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    Ps: forse ho sbagliato sezione e dovevo postare in " MySQL " al posto di " SQL Server "
  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    giuliopowa95 ha scritto:


    ps: forse ho sbagliato sezione e dovevo postare in " MySQL " al posto di " SQL Server "
    Ovviamente, ma vedo che è già stato fatto.

    Per la tua query, prova a scrivere l'espressione che hai descritto in linguaggio SQL e mostracela.
    Poi la commentiamo.
  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    giuliopowa95 ha scritto:


    - 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.
    Direi che la spiegazione è criptica a dir poco.
    Da quanto posso intuire vuoi normalizzare l'archivio.
    Iniziamo: c'è una chiave primaria?
  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    Eh non riesco a farla perchè tutte le altre volte che facevo le query modificavo tutti i campi ( apparte quelli che venivano esclusi con una condizione ) con lo stesso valore.

    in pratica quando arrivo qui dove ci sono i punti di domanda

    UPDATE ps_product_lang
    SET description_short = ???

    non so cosa inserire ,perchè non c'è un unico valore corretto , il valore deve prenderlo dall'altro campo ma deve soddisfare la condizione.

    ________

    adesso cerco di farmi capire meglio con due immagini



    in pratica devo riuscire a copiare il valore che è scritto nel campo " description_short " della stessa riga dove il campo " id_shop" deve essere con il valore di 2 , nel campo vuoto di " description_short" dove il campo "id_shop" ha come valore 6. Però queste due righe devono avere lo stesso " id_product" e " id_lang".

    spero di essermi fatto spiegare anche se come dice +m+ non si capisce tanto

    No in questa tabella non c'è nessuna chiave primaria.
  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    giuliopowa95 ha scritto:


    No in questa tabella non c'è nessuna chiave primaria.
    Se non c'è una chiave primaria, come pensi di identificare univocamente il record sorgente e quello destinazione?

    Solitamente, se non hai già un attributo che si presta naturalmente a fungere da chiave, si aggiunge un campo INT autoincrementante e si usa quello come chiave primaria.

    Una volta fatto ciò, dovresti riuscire a risolvere il tuo problema con una query tipo:
    
    UPDATE tabella
    SET campo = (SELECT campo
    			FROM tabella
    			WHERE chiave = n2)
    WHERE chiave = n;
    
    EDIT:
    Nel tuo caso, potresti usare come chiave primaria la terna id_product, id_shop e id_lang, a meno che non hai bisogno di mantenere più record che hanno la stessa terna (può succedere ad esempio se vuoi mantenere uno storico nella stessa tabella dei dati attuali, per cui anziché cancellare i record setti un flag visibile/invisibile (e magari un reference al record con i dati precedenti)).
    Poi si può discutere dei vantaggi/svantaggi di tale soluzione rispetto ad una con chiave surrogata, ma nel tuo caso permetterebbe di esprimere la query in modo più naturale.
  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    Seguendo il tuo consiglio ho pensato di fare così:
    
    UPDATE ps_product_lang
    	SET description_short =
    		(
    			SELECT description_short
    			FROM ps_product_lang
    			WHERE id_shop = 2
    		)
    	WHERE id_shop = 6
    
    però adesso devo capire come fare a scrivere che deve eseguire questa query solo se hanno lo stesso id_product e id_lang.
  • Re: [solved]Copiare dati tra campi della stessa tabella Query MYSQL

    Problema risolto grazie a tutti per l'aiuto e per i consigli !! ma alla fine ho risolto con questa query
    
    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;
    
    ps: ho messo [solved] al titolo del topic
Devi accedere o registrarti per scrivere nel forum
9 risposte