Forum

Discussione: [mysql] Update di più righe contemporanemante

Visualizzazione risultati 1 fino 8 di 8

  1. 07-10-2008, 18.52.34

    #1
    Otaku
    Otaku non è connesso Utente
    Data registrazione
    07-01-2003
    Messaggi
    227

    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. 07-10-2008, 19.30.18

    #2
    Guest
    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. 07-10-2008, 19.34.03

    #3
    L'avatar di debug
    debug
    debug non è connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872
    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!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™

  4. 08-10-2008, 10.25.18

    #4
    L'avatar di dementialsite
    dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,056
    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. 08-10-2008, 11.05.13

    #5
    L'avatar di debug
    debug
    debug non è connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872
    mmm scusa demential, non mi sono documentato molto, ma non mi risulta che con REPLACE si possano specificare condizioni (where...), sbaglio?


    Ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™

  6. 08-10-2008, 19.26.55

    #6
    Otaku
    Otaku non è connesso Utente
    Data registrazione
    07-01-2003
    Messaggi
    227
    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. 08-10-2008, 21.41.55

    #7
    L'avatar di dementialsite
    dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,056
    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. 09-10-2008, 11.59.45

    #8
    L'avatar di debug
    debug
    debug non è connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872
    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!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum! © ® ™

Thread Information

Regole di scrittura

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

SEO by vBSEO