Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: php e update mySQL

  1. #1

    php e update mySQL

    Mi occorre effettuare una modifica sul campo 'data' della tabella 'prima nota' del mio db;

    in effetti devo modificare il contenuto del campo 'data' di tutti i record inserendo un timestamp iniziale '10414333200' che si incrementa per i '633' record con un incremento di '165742' fino ad arrivare alla fine dell'ultimo record con un timestamp '1146348498' circa.

    ho provato in questo modo, ma credo sbagliando:

    <? php

    $mkt=mktime(16,00,0,1,01,2003); // 1041433200

    $time = time(); // 1146348498

    $diff = $time - $mkt; // 104915298

    $num_rec = 633;

    $num = $diff / $num_rec; // 165742

    // connessione al db

    $db=mysql_connect('localhost', 'root', '');

    if ($db==false)
    die("Errore nella connessione.");

    // seleziona db

    mysql_select_db('registro', $db)

    or die("Errore nella selezione del database.");

    $ris = $mkt;

    $mia_var=1;

    for ($i = 1; $mia_var <= 633; $mia_var++) {

    // costruzione query

    $query="UPDATE `prima nota` SET `data` = '$ris'";

    $ris = $mkt + 165742;
    }

    mysql_close($db);

    ?>

    dove sbaglio?

    ciao a tutti

  2. #2
    un primo errore l'ho trovato, non si incrementava la variabile $ris



    $ris = $mkt;

    $mia_var=1;

    for ($i = 1; $mia_var <= 633; $mia_var++) {

    // costruzione query

    echo "
    ". $ris;

    $query = "UPDATE `prima nota` SET `data` = '$ris',

    $ris = $mkt + 165742;

    $mkt = $ris + 165742;
    }

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    In effetti ci sono un pò di errori.
    La query per eseguirla devi usare mysql_query().
    Devi specificare a quale record vuoi assegnare un determinato timestamp.
    Nel for vuoi ciclare per mia_var minore di 633 ma inizializzi $i.

    Prova una cosa del genere:
    for($i=1;$i<=633;$i++)
    {
    $query = mysql_query("update primanota set data = '$mkt' where id = '$i' ") or die(mysql_error());
    $mkt = $mkt + $num;
    }

    edit: se per identificare una tabella, un campo,ecc. vuoi usare più parole devi usare un _.

  4. #4
    in questo modo funziona,


    // aggiornamento query

    $num = 165742;

    for($i=1;$i<=633;$i++){

    echo "
    ". $mkt ."
    ";

    $query = mysql_query("UPDATE primanota SET data = '$mkt' WHERE id = '$i' ") or die(mysql_error());

    $mkt = $mkt + $num;

    echo "
    ". "Aggiornamento id :" . $i . " " . $mkt
    ."
    ";
    }

    ma non aggiorna tutti i record, si ferma un po prima.
    Vorrei inserire al posto del num 633 il totale dei record, come faccio?

    Grazie mille

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    al posto di 633 metti il numero totale di record.
    Qundi prima del for o fai una query del genere:

    select count(*) FROM tabella;

    oppure usi la funzione mysql_num_rows();

    $risultato = mysql_query("SELECT * FROM tabella");
    $num_righe = mysql_num_rows($risultato);


  6. #6
    in effetti funziona, nel senso che anzichè avere direttamente il numero costante 633 ho il numero di record, che però è sempre 633.

    La cosa è dovuta al fatto che i record sono effettivamente 633, ma l'ultimo id è 689 quindi qualche id non c'è più.

    si può fare che quando non trova l'id passa al successivo in modo da arrivare alla fine dei 633 record all'id 689?

    spero di essere stato abbastanza chiaro.

    ecco la routine aggiornata con il tuo suggerimento 'funzionante' come descritto sopra:

    // aggiornamento query

    $risultato = mysql_query("SELECT * FROM primanota");

    $num_righe = mysql_num_rows($risultato);

    $num = 165742;

    for($i=1;$i<=$num_righe;$i++){

    echo "
    ". $mkt ."
    ";

    $query = mysql_query("UPDATE primanota SET data = '$mkt' WHERE id = '$i' ") or die(mysql_error());

    $mkt = $mkt + $num;

    echo "
    ". "Aggiornamento id :" . $i . " " . $mkt
    ."
    ";
    }

    ciao.

  7. #7
    provo a esprimere un concetto:

    dovrebbe confrontare la variabile del contatore con l'id e se i dati non corrispondono deve incrementare il contatore, se i dati corrispondono deve fare l'aggiornamento.

    ho detto bene? e se ho detto bene come faccio?

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ovviamente se ci sono dei 'buchi' non puoi usare il for ma il while. Quindi:

    //recuperi tutti gli id
    $query = mysql_query("select id from primanota") or die(mysql_error());


    //cicli la tabella
    while ($row = mysql_fetch_array($query))
    {
    $id = $row['id']; //
    $query2 = mysql_query("update primanota set data = '$mkt' where id = '$id' ") or die(mysql_error());
    $mkt = $mkt + $num;
    }

  9. #9
    ok risolto, riporto lo script completo e funzionante:

    <?

    /* Modifica campo data dell'intera tabella */

    $mkt=mktime(16,00,0,9,01,2003); // 1062424800

    echo $mkt."
    ";

    $time = time(); // 1146393717

    echo $time."
    ";

    $diff = $time - $mkt; // 83968917

    echo $diff."
    ";

    // connessione al db

    $db=mysql_connect('localhost','root','');
    if ($db==false)
    die("Errore nella connessione.");

    // seleziona db

    mysql_select_db('registro', $db)
    or die("Errore nella selezione del database.");

    // esegue la query e mette la tabella in $risultato

    $risultato = mysql_query("SELECT * FROM cassa");

    // mette il numero di record della tabella in $num_righe

    $num_righe = mysql_num_rows($risultato) + 1;

    $num = $diff / $num_righe; // 132863.55134281

    echo $num."
    ";

    echo "numero di record che saranno aggiornati :"." ".$num_righe."
    ";

    // recuperi tutti gli id

    $query = mysql_query("SELECT id FROM cassa") or die(mysql_error());

    // cicli la tabella

    while ($row = mysql_fetch_array($query))

    {

    $id = $row['id']; //
    echo "
    ". $mkt ."
    ";
    $query2 = mysql_query("UPDATE cassa SET data = '$mkt' WHERE id = '$id' ") or die(mysql_error());
    $mkt = $mkt + $num;
    echo "
    ". "Aggiornamento id :" . $id . " " . $mkt
    ."
    ";
    }

    mysql_close($db);

    ?>

    ho ancora un piccolo problema:

    ho un mkt iniziale '1062424800' corrispondente al 1/9/2003
    ed ho il mkt attuale (circa) '1146129042'
    sto provando in tutti i modi di modificare i record in maniera progressiva con l'inserimento del mkt in tutti i campi data della tabella, ma anche se mi inserisce progressivamente il mkt aumentato ad ogni riga, non mi trovo con l'ultimo record che dovrebbe portare la data attuale, '30/4/2006' mentre mi porta '13/08/2006'

    come posso ovviare

    grazie

  10. #10
    scusa, chiamavo una tabella non aggiornata

    funziona grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.