Visualizzazione risultati 1 fino 8 di 8

Discussione: [mysql] Update di più righe contemporanemante

  1. #1
    Guest

    Predefinito [mysql] Update di più righe contemporanemante

    Salve a tutti.
    Ho creato una tabella nel mio db per la mia squadra di pallavolo. MI serve per fare una classifica dei miglior giocatori.

    Iniziando a pensare ad una interfaccia grafica però non so come fargli far modificare più righe ( tuple ) contemporanemante.
    Ovvero lo script interroga il db e si prende tutti i valori, poi tramite i campi insert vorrei farli modificare, ma non so come fare dato che un foreach non va bene.
    Vi posto il codice che cmq è sbagliato, se potete darmi una soluzione ne sarei grato


    Modifica.php
    Codice PHP:
    <?
    $connessione
    = mysql_connect("localhost","otaku","******")or die("Connessione non riuscita: " . mysql_error());

    mysql_select_db("my_otaku", $connessione) or die("Errore nella selezione del database");

    $query = mysql_query("SELECT * FROM pallavolo_media ORDER BY Nick DESC",$connessione);

    if (
    $query==FALSE) die("errore nella composizione della query");
    $indice = 0;
    echo
    "<form name=\"Mod_dati\" action=\"mod.php\" method=\"GET\">
    <table border=\"1\"><tr>
    <td> ID</td>
    <td> NICK </td>
    <td> NOME </td>
    <td> SET VINTI </td>
    <td> SET TOTALI </td>
    <tr>"
    ;

    while(
    $row=mysql_fetch_array($query)){

    $id = $row[Id] ;
    $Nick = $row[Nick] ;
    $Nome = $row[Nome] ;
    $S_tot = $row[S_totali] ;
    $S_vin = $row[S_vinti];

    echo
    "
    <tr> <td>
    $id <input type=\"hidden\" name=\"id\" value= $id></td>
    <td>
    $Nick <input type=\"text\" name=\"Nick\" tabindex=\"1\" value=\"$Nick\"></td>
    <td>
    $Nome <input type=\"text\" name=\"Nome\" tabindex=\"2\" value=\"$Nome\"></td>
    <td>
    $S_vin <input type=\"text\" name=\"S_vin\" tabindex=\"3\" value=\"$S_vin\"></td>
    <td>
    $S_tot <input type=\"text\" name=\"S_tot\" tabindex=\"4\" value=\"$S_tot\"></td>
    </tr> "
    ;
    }

    echo
    "<input type=\"hidden\" name=\"rop\" value=\"modifica\">
    <input type=\"submit\" value=\"Modifica\"></table></form> "
    ;
    mysql_close($connessione);
    ?>
    Mod.php
    Codice PHP:
    <?

    if($rop == "modifica"){
    $connessione = mysql_connect("localhost","otaku","*****")or die("Connessione non riuscita: " . mysql_error());
    mysql_select_db("my_otaku", $connessione) or die("Errore nella selezione del database");

    mysql_query("UPDATE pallavolo_media SET Nick=$Nick, Nome=$Nome, S_totali=$S_tot, S_vinti=$S_vin WHERE id=$id");



    }

    ?>

  2. #2
    Guest

    Predefinito

    Mmm.la query è sbagliata..deve essere:
    Codice PHP:
    $query = mysql_query("UPDATE my_tb SET campo = '$valore', campo2 = '$ciao' WHERE id = '$myid'"); // meglio assegnare SEMPRE una variabile ad una query...
    Ciao! ^^
    Ultima modifica di sIM : 07-10-2008 alle ore 19.32.01

  3. #3
    Guest

    Predefinito

    Se l'intento è quello di risparmiare query, e quindi usarne una sola per fare più update alla volta, non è possibile.
    Se invece vuoi rendere il tutto più dinamico e automatico, puoi duplicare la query di update per quante sono le righe da modificare.


    Ciao!

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Se l'intento è quello di risparmiare query, e quindi usarne una sola per fare più update alla volta, non è possibile.
    A dir la verità una soluzione ci sarebbe, si usa la query REPLACE. La sintassi è la stessa di INSERT:
    Codice:
    REPLACE nome_tabella (campo1, campo2, ..., campoN) VALUES
       (valore11, valore12, ..., valore1N),
       (valore21, valore22, ..., valore2N),
       ...
       (valoreM1, valoreM2, ..., valoreMN)
    Usa questa query con MOLTA cautela: potrebbe aggiornarti i record (senza ritorno!) come chiedi, così come creartene di nuovi se non riesce a trovarli nella tabella.

    Altra cosa: con REPLACE è possibile solo prendere dei valori e sovrascriverli con altri... ma non si possono fare operazioni più complesse (ad esempio modificare un campo in funzione di altri campi) come con UPDATE.

    Stammi bene...
    Ultima modifica di dementialsite : 08-10-2008 alle ore 10.26.59
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    Guest

    Predefinito

    mmm scusa demential, non mi sono documentato molto, ma non mi risulta che con REPLACE si possano specificare condizioni (where...), sbaglio?


    Ciao!

  6. #6
    Guest

    Predefinito

    Bhe l'intento non è tanto quello di risparmiare le query bensì quello di risparmiare le volte che devo premere il tasto Modifica.
    Così facendo esce una sola pagina con i valori di tutti e posso modificare facilmente gli attributi.
    Come detto prima è per classifiche di pallavolo quindi sono da aggiornare minimo 12 tuble per partita..... se devo farle singolarmente diventa un po una palla.

    Inizierò a provare con le vostre soluzioni, speriamo di arrivare ad un buon risultato


    EDIT:
    allora apportando la modifca di Sim lo script mi aggiorna solo l'ultimo record.
    Nel file mod.php ho provato a metterci un While
    Codice PHP:
    while ($id != " "){
    $query = mysql_query("UPDATE pallavolo_media SET Nick='$Nick', Nome='$Nome', S_totali='$S_tot', S_vinti='$S_vin' WHERE id='$id' ");
    }
    echo
    "operazione eseguita... <a href=\"modifica.php\">Torna alla calssifica</a>"
    Ma facendo così lo script si blocca
    Ultima modifica di seneca : 08-10-2008 alle ore 20.06.48

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    mmm scusa demential, non mi sono documentato molto, ma non mi risulta che con REPLACE si possano specificare condizioni (where...), sbaglio?
    Come ho scritto sopra, la query REPLACE consente solamente di inserire nuovi valori al posto dei precedenti. Se la clausola WHERE di UPDATE è quella tipica WHERE id = '...', e le operazioni di aggiornamento da eseguire sono tutte uguali, REPLACE in questo modo permette di risparmiare molte query (basta inserire tra i campi da inserire/modificare anche l'ID...).

    Clausole WHERE più complesse (come trovare i record all'interno di un range di valori di un campo) o anche solo impostazioni più complesse (ad esempio, aggiornare il valore di un campo in funzione di altri campi) non sono consentite. Però ripeto, può essere un'utile scorciatoia scrivere una sola query in questo modo:
    Codice:
    REPLACE Tabella (ID, Campo) VALUES
       (1, nuovoValore1),
       (2, nuovoValore2),
       (3, nuovoValore3),
       ...
       (M, nuovoValoreM);
    piuttosto che M query diverse del tipo
    Codice:
    UPDATE Tabella SET Campo = nuovoValore1 WHERE ID = 1;
    UPDATE Tabella SET Campo = nuovoValore2 WHERE ID = 2;
    UPDATE Tabella SET Campo = nuovoValore3 WHERE ID = 3;
    ...
    UPDATE Tabella SET Campo = nuovoValoreM WHERE ID = M;
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    Oh, ora ho capito!
    E' la stessa logica dell'INSERT IGNORE ma al contrario (si basa, in un certo senso, sempre sulle chiavi uniche per la sostituzione o la sovrascrittura).

    Bello bello, ho un paio di query in cui inserirlo ;)


    Ciao!

Regole di scrittura

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