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.

$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 % 4 == 0) $bisesto++; 
        } 

    if($da[1] > 2 AND $da[2] % 4 == 0) $bisesto--; 
    if($a[1]  < 2 AND $a[2]  % 4 == 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

inviato 9 anni fa
leoneweb
X 0 X

Il campo "conta" è un campo calcolato, funzione di altre informazioni che tu già possiedi nel DB. Per questa ragione, nel 99% dei casi, quel campo non dovrebbe esistere ma dovrebbe essere ottenuto ogni volta che serve attraverso un calcolo sui dati primitivi.

Quindi, prima di correggere una funzione, non credi sia il caso di ripensare al funzionamento del sistema?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

prima cosa grazie x la tua pazienza e sempre pronto a rispondere.

per te come dovrei fare  a ricalcolare i giorni dalla data $no=("01-01-2007")

alla data che ogni record contiene

In pratica mi estraggo la data di ogni record e per ognuno mi deve ricalcolare il numero di giorni rispetto a

$no

risposto 9 anni fa
leoneweb
X 0 X

In una SELECT puoi inserire delle operazioni, anche sulle date, in modo che i risultati che ti restituisce contengono proprio i giorni che avresti memorizzato nella colonna "conta".

Vai sul manuale di MySQL e cerca le funzioni per le operazioni sulle date, direttamente nell'SQL

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
$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());

grazie   :bye:

risposto 9 anni fa
leoneweb
X 0 X

anche se secondo me è meglio eliminare "conta" e calcolarlo ogni volta che serve, quindi mettere quell'operazione nelle SELECT

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda