if con operatori relazionali e date

Buon anno a tutti,

Ho estratto un recordset tramite una qry dove, tra gli altri, recupero un campo data formattandolo nel seguente modo: date_format(fin_records.fin_record_date,'%d-%m-%Y') as Date,

successivamente metto il recordset estratto all'interno di un array.

Ho poi necessità di filtrare i dati all'interno dell'array in base al campo data suddetto mettendolo in relazione a due variabili che rappresentano due date, $dat1='01-01-2008' e $data2='31-01-2008'.

Quindi mi trovo in questa situazione:

for ($i=0;$i<count($arrFinRecSet2);$i++)
   {
      if($arrFinRecSet2[$i][Date]>=$date1 and $arrFinRecSet2[$i][Date]<=$date2) {
         $arrFinRecSet3[] = $arrFinRecSet2[$i];}
        }

La parte di codice sopra non riesce però a filtrare i dati, perché credo non riesca a mettere in relazione le date?

Infatti se effettuo questo cambiamento:

for ($i=0;$i<count($arrFinRecSet2);$i++)
   {
      if($arrFinRecSet2[$i][Date]==$date1) {
         $arrFinRecSet3[] = $arrFinRecSet2[$i];}
        }

Filtra i dati correttamente mostrando solo i records con data 01-01-2008.

Quale potrebbe essere un sistema per superare questo problema?

Grazie dell'attenzione.

Amos

inviato 8 anni fa
amosse
X 0 X

Premetto che la condizione sulle date potevi benissimo inserirla nella query, in modo da non doverlo fare poi in PHP.

Comunque il confronto che fai in PHP non è tra date (PHP non sa che sono delle date) ma tra stringhe e ovviamente non può funzionare. I confronti "minore" e "maggiore" possono funzionare con dei numeri ma le date non sono neanche dei semplici numeri.

Un modo per aggirare il problema si basa sul confronto dei timestamp delle date, che invece sono dei semplici numeri interi (il numero di secondi trascorsi dal 1/1/1970 alla data in questione).

Potresti quindi trasformare le date in timestamp e poi confrontarle.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Grazie della risposta,

Ho convertito le stringhe con strtotime() e adesso mi sembra che funzioni.

Non ho messo direttamente nella query il test tra le date perché calcolo i saldi progressivi con la query, quindi ho bisogno di scorrere tutti records dell'anno, e solo dopo (il filtraggio suddetto) l'utente decide quali records visualizzare.

Un piccolo chiarimento, visto che i records estratti (dell' anno) li inserisco in un array, in previsione di grossi quantitativi di dati, ci possono essere dei problemi?

Ciao

Amos

risposto 8 anni fa
amosse
X 0 X
Un piccolo chiarimento, visto che i records estratti (dell' anno) li inserisco in un array, in previsione di grossi quantitativi di dati, ci possono essere dei problemi?

dipende da cosa intendi per "grossi quantitativi di dati"...

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Tipo 5.000 records su 10 colonne,

risposto 8 anni fa
amosse
X 0 X

giusto per fare due conti della serva: 5000 record * 10 colonne * 10 byte per campo = 500.000 byte = 500kb, pochino...

ma realmente ti servono tutti quei dati contemporaneamente disponibili in un array? Magari devi solo effettuare un ciclo su questi dati e quelli già elaborati non ti servono più (e quindi li cancelli)

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Grazie della risposta.

Lo script é impostato più o meno così:

if($_POST) {
   inserisci_record();
}
elseif($_GET['record_caricato']) {
   form_inserimento_record-visualizza_record();
}
else  {
   form_inserimento_record();
}

Nella funzione inserisci_record() viene richiamata un'altra funzione che, dopo l'inserimento del record, estrae i dati e li immette nell'array. Poi l'array lo carico sulla sessione (del tipo  $_SESSION['RecSet'] = Recset()). Quindi tramite header passo i messaggi per gli eventuali errori, e la variabile $Record_caricato.

In caso di errori per campi obbligatori non compilati, viene richiamata la funzione form_inserimento_record() , quindi l'utente deve ripetere l'inserimento.

In caso di inserimento effettuato con successo, viene chiamata la funzione form_inserimento_record-visualizza_record(), che mostrerà per primo la form di inserimento e sotto il recordset che recupero tramite la sessione ($RecSet = $_SESSION['RecSet']), e che successimante verrà passato attraverso il ciclo for per l'impaginazione. Il sisetma di paging palleggia via $_GET sia il numero di pagina da visualizzare che il $record_caricato (quest'ultimo al fine di poter garantire l'esecuzione della funzione form_inserimento_record-visualizza_record() durante il passaggio da una pagina all'altra).

Quindi come vedi per ora sto lavorando sull'inserimento e probabilmente non ho bisogno di mettere tutti i records nell'array (metterò solo che so quelli degli ultimi due mesi, in modo che l'utente abbia sempre uno sguardo su quello che sta facendo) quindi non  saranno sicuramente 5.000.

Ma visto che volevo usare una cosa analoga per la visualizzazione, allora in quel caso saranno molti di più.

A questo punto mi viene spontanea la domanda:

Riguardo il caricamento dell'array su $_SESSION, chiaramente ad ogni inserimento l'array verrà sovrascritto su $_SESSION, ma in caso di molti utenti che stanno lavorando insieme (diciamo 10), si avranno diversi (n.10) array caricati sul server web (quindi 500Kb x10 = 5000Kb) questo può causare problemi?

Inoltre in una situazione del genere quale potrebbe essere il miglior setaggio della durata della sessione?

Grazie dell'attenzione.

Amos

risposto 8 anni fa
amosse
X 0 X

In generale è sconsigliabile che uno script PHP richieda parecchia memoria sopratutto se i dati sono conservati in sessione.

Come correttamente hai osservato, il calcolo delle risorse impiegate va fatto tenendo presente l'utilizzo contemporaneo dell'applicativo da parte di più utenti. Se i dati sono in sessione poi c'è da considerare lo spazio su disco occupato.

Comunque se proprio hai bisogno di tutti quei dati devi decidere se è meglio salvarli in sessione oppure recuperarli ogni volta da DB.

 :bye:

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