Visualizzazione dei risultati da 1 a 9 su 9

Discussione: funzione-update

  1. #1

    funzione-update

    Ho una tabella costituita da 5 campi (id-nome-data_in-data_out-conta).
    Il campo conta contiene il risultato di giorni che sono passati da una data fissa alla data_in.
    Adesso nel database ho inserito un certo numero di record.
    Tramite una pagina php ho creato una query con una condizione,
    cioè seleziona tutti i record che hanno la data_in > della data fissa.
    Adesso una volta selezionati tutti i record con la condizione mi deve ricalcolare e
    aggiornare i giorni che sono passati da un'altra data fissa alla data_in.


    Codice PHP:
    $no=("01-01-2007");
    $data_xma $data_in;
     
    mysql_select_db($database_db$db);
    $query_Recordset2 "SELECT * FROM in WHERE data_in >= '$no'";
    $Recordset2 mysql_query($query_Recordset2$db) or die(mysql_error());
    $row_Recordset2 mysql_fetch_assoc($Recordset2);
    $totalRows_Recordset2 mysql_num_rows($Recordset2);

    function 
    contaxx($data_xma$no) { 
        
        
    $a   explode('-'$data_xma); 
        
    $da  explode('-'$no); 
        
    $bisesto 0

        
    $n_anni   = ($a[2] - $da[2]); 
             
        for(
    $i $da[2]; $i <= $a[2]; $i++) { 
            if (
    $i == 0$bisesto++; 
            } 

        if(
    $da[1] > AND $da[2] % == 0$bisesto--; 
        if(
    $a[1]  < AND $a[2]  % == 0$bisesto--; 

        
    $n_giorni $n_anni 365 $bisesto;             

        
    $giorni_da =date('z'mktime(0,0,0$da[1], $da[0], 1970));   
        
    $giorni_a  =date('z'mktime(0,0,0$a[1], $a[0], 1970)); 

        return 
    $tot $n_giorni $giorni_da $giorni_a


    contaxx($data_xma$no);
    $conta_fina=contaxx($data_xma$no);

    do{
    mysql_select_db($database_db$db);
    $query_T "update inset conta = '$conta_fina'  WHERE data_in >= '$no'";
    $T mysql_query($query_T$db) or die(mysql_error());
    } while (
    $row_Recordset2 mysql_fetch_assoc($Recordset2)); 
    Questo che ho fatto funziona, però mi fa il calcolo solo per il primo record e il risultato me
    lo aggiorna su tutti i rimanenti record,di conseguenza mi trovo il campo conta uguale
    x tutti i record.Invece io dovrei far in modo che per ogni record mi fa il calcolo e lo aggiorna

  2. #2
    up!

  3. #3
    potresti fare tutto con una sola query UPDATE a condizione di usare la data nel formato previsto:
    yyyy-mm-dd

    codice:
    // esempio
    $data_fissa = '2007-01-01';
    $data_start = '2006-03-01';
    
    UPDATE tabella set 
    conta = datediff('$conta_in', $data_start')  
    WHERE data_in >= '$data_fissa'

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Codice PHP:
    $data_fissa '2007-01-01';

    mysql_select_db($database_db$db); 
    $query_Recordset2 "SELECT * FROM in WHERE data_in >= '$data_fissa"
    $Recordset2 mysql_query($query_Recordset2$db) or die(mysql_error()); 
    $row_Recordset2 mysql_fetch_assoc($Recordset2); 
    $totalRows_Recordset2 mysql_num_rows($Recordset2);

    $start=$row_Recordset2['data_in'];

    do {
    mysql_select_db($database_db$db);
    $query_T "update in set conta= datediff('$start', '$data_fissa') WHERE data_in >= '$data_fissa'";
    $T mysql_query($query_T$db) or die(mysql_error());
    } while (
    $row_Recordset2 mysql_fetch_assoc($Recordset2)); 
    Ho fatto in questo modo
    Appena trova il primo record che soddisfa lo query esegue il calcolo giusto e fa l'update
    però al secondo record che soddisfa sempre la query inserisce lo stesso numero che aveva inserito nel primo record e se ce ne fosse un terzo e quarto mette sempre lo stesso numero,quando in realtà la data_in sono diverse

  5. #5
    non devi fare la SELECT. Non serve. Basta questo:
    Codice PHP:
    $data_fissa '2007-01-01';

    mysql_select_db($database_db$db);

    $query_T "update in 
                set conta = datediff(data_in, '
    $data_fissa') 
                WHERE data_in >= '
    $data_fissa' ";
                
    $T mysql_query($query_T$db) or die(mysql_error()); 
    E' impossibile che dia lo stesso risultato a meno che la data contenuta in data_in sia uguale per tutti. Con una query ti fa tutta la tabella.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    grazie

    sbagliavo in

    codice:
    datediff(data_in, '$data_fissa')
    e mettevo

    codice:
    datediff('$data_in', '$data_fissa')

  7. #7
    Ho cambiato il sistema per quanto riguarda il conteggio.
    Ho una tabella A con 3 campi id-data_in-conta.
    Supponiamo che all'interno della tabella A ho 5 record con 5 date differenti.
    Ho un'altra tabella B composta da 3 campi id-data_da-data_pa
    Adesso devo prendere ogni data dalla tabella A e verificare se è compresa
    tra le due date(data_da-data_pa) della tabella B,e se verificata estrarre il record id della tabella B e inserirlo nel campo conta della tabella A.

    E' possibile fare questo? VVoVe:

  8. #8
    si puo' fare di tutto (anche sbagliare) ....

    codice:
    Update tabA from tabA, tabB
    set tabA.conta = tabB.id
    where tabA.data_in between tabB.data_da AND tabB.data_pa
    salvo errori od omissioni ....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Nel frattempo avvevo fatto così (sempre che non ho sbagliato a trascrivere) e dovrebbe andare.Avevo dimenticato di dire che deve essere anche magiore di $no_bis

    codice:
    "update TabA,TabB set TabA.conta = TabB.id 
    WHERE TabB.data_da <=TabA.data_in 
    AND TabB.data_pa >=TabA.data_in 
    AND TabA.data_in >='$no_bis'";
    ciao

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 © 2025 vBulletin Solutions, Inc. All rights reserved.