Visualizzazione risultati 1 fino 4 di 4

Discussione: Update tabella da altra tabella

  1. #1
    Data registrazione
    28-08-2013
    Messaggi
    23

    Predefinito Update tabella da altra tabella

    Ciao a tutti, sono ore che mi scervello su sta cosa e non riesco a venirne a capo.

    Ho due tabelle (rank_1 e rank_2) e dovrei estrarre i valori di rank_2, sommarli a rank_1 e sovrascrivere i valori di rank_2.

    Al momento estraggo i valori in questo modo

    Codice PHP:
    include ('connection.php');

    $sql = "SELECT matchday FROM 1516_misc";
    $result = mysqli_query($conn, $sql);

    while(
    $row = mysqli_fetch_assoc($result)) {
    $matchday = $row['matchday'];
    }

    $matchday--;


    $gio = array();


    $sql = "SELECT * FROM 1516_rank_$matchday ORDER BY name";
    $result = mysqli_query($conn, $sql);

    while(
    $row = mysqli_fetch_assoc($result)) {

    array_push($gio, $row);

    }

    $matchday++;

    $gio_1 = array();


    $sql = "SELECT * FROM 1516_rank_$matchday ORDER BY name";
    $result = mysqli_query($conn, $sql);

    while(
    $row = mysqli_fetch_assoc($result)) {

    array_push($gio_1, $row);

    }

    e li stampo a schermo in questo modo (per avere un dettaglio dei dati che estraggo, una sorta di debug "a modo mio")

    Codice PHP:
    for ($i = 0; $i < count($gio); $i++){
    while (list(
    $chiave, $valore) = each ($gio[$i])){
    echo
    $valore . " - ";
    }
    echo
    "<br />";
    }

    for (
    $i = 0; $i < count($gio_1); $i++){
    while (list(
    $chiave, $valore) = each ($gio_1[$i])){
    echo
    $valore . " - ";
    }
    echo
    "<br />";
    }
    Ordinando l'estrazione delle tabelle per nome, so per certo che nei due array ($gio e $gio_1) le posizioni combaciano (ovvero vengono estratti tizio, caio, sempronio ecc. in entrambe le query alla stessa posizione)


    gio
    Codice:
    7 - BECSTA - 0 - 0 - 0 - 0 - 0 - 0 - 0.0 -
    2 - BERTO - 0 - 0 - 0 - 0 - 0 - 0 - 0.0 -
    6 - BUMBE - 0 - 0 - 0 - 0 - 0 - 0 - 0.0 -
    8 - GIGI - 0 - 0 - 0 - 0 - 0 - 0 - 0.0 -
    5 - MILESI - 0 - 0 - 0 - 0 - 0 - 0 - 0.0 -
    1 - MITCH - 0 - 0 - 0 - 0 - 0 - 0 - 0.0 -
    4 - SOLDA - 0 - 0 - 0 - 0 - 0 - 0 - 0.0 -
    3 - VANZE - 0 - 0 - 0 - 0 - 0 - 0 - 0.0 -
    gio_1
    Codice:
    2 - BECSTA - 3 - 1 - 0 - 0 - 2 - 0 - 73.5 -
    1 - BERTO - 3 - 1 - 0 - 0 - 2 - 1 - 76.5 -
    3 - BUMBE - 3 - 1 - 0 - 0 - 1 - 0 - 70.5 -
    4 - GIGI - 3 - 1 - 0 - 0 - 2 - 0 - 73.0 -
    5 - MILESI - 0 - 0 - 0 - 1 - 1 - 2 - 70.0 -
    6 - MITCH - 0 - 0 - 0 - 1 - 0 - 2 - 63.0 -
    7 - SOLDA - 0 - 0 - 0 - 1 - 0 - 1 - 64.5 -
    8 - VANZE - 0 - 0 - 0 - 1 - 0 - 2 - 62.0 -
    E qui sorge un altro problema, la prima colonna è quella che contiene gli id, la seconda i nomi e le restanti 7 sono numeri, ecco io dovrei aggiornare solo le ultime 7.


    C'è un metodo per fare una cosa del genere con una sola query (naturalmente ripetuta per tutte le righe delle tabelle (8))?
    Ultima modifica di primoverofantacalcio : 12-04-2016 alle ore 01.43.30

  2. #2
    Guest

    Predefinito

    Ammettendo che le due tabelle (tabella_1 e tabella_2) abbiano un campo univoco che li metta in relazione (per comodità ammettiamo che sia il campo "id" in entrambe le tabelle)

    Codice PHP:
    UPDATE tabella_1 t1, tabella_2 t2
    SET t2
    .campo1 = t2.campo1 + t1.campo1, t2.campo2 = t2.campo2 + t1.campo2, ..., t2.campoN = t2.campoN + t1.campoN
    WHERE t1
    .id = t2.id
    così facendo aggiorni i valori di dei campi di tabella_2 aggiungendo al valore che già hanno il valore del rispettivo campo in tabella_1.

    Attenzione, i campi di tabella_1 non saranno modificati.

  3. #3
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Beh dovrebbe implementare l'id (riferimento personale utente) per tutte le tabelle e solo così evita i casi di due name ad essere scambiati per la stessa persona. In questo caso è il campo name la relazione tra due tabelle. Prima di ogni modifica, crea un backup!
    grazie vplaza.
    Come potrebbe recuperare l'intero corrente di $matchday, decrementarlo e incrementarlo, $matchday è parte del nome delle due tabelle dove la seconda tabella deve essere aggiornata dalla somma di tabella2 + tabella1. Sarebbe possibile?
    Ultima modifica di darbula : 12-04-2016 alle ore 15.56.56

  4. #4
    Data registrazione
    28-08-2013
    Messaggi
    23

    Predefinito

    Citazione Originalmente inviato da vplaza Visualizza messaggio
    Ammettendo che le due tabelle (tabella_1 e tabella_2) abbiano un campo univoco che li metta in relazione (per comodità ammettiamo che sia il campo "id" in entrambe le tabelle)

    Codice PHP:
    UPDATE tabella_1 t1, tabella_2 t2
    SET t2
    .campo1 = t2.campo1 + t1.campo1, t2.campo2 = t2.campo2 + t1.campo2, ..., t2.campoN = t2.campoN + t1.campoN
    WHERE t1
    .id = t2.id
    così facendo aggiorni i valori di dei campi di tabella_2 aggiungendo al valore che già hanno il valore del rispettivo campo in tabella_1.

    Attenzione, i campi di tabella_1 non saranno modificati.

    Ottimo, ti ringrazio moltissimo, era proprio quello che cercavo

    P.S. Notavo adesso, mi son dimenticato una "l" nel titolo , se qualche mod capita qui può correggerlo?
    Ultima modifica di primoverofantacalcio : 12-04-2016 alle ore 18.00.34

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •