Contare totale risultati tabella in un periodo di tempo

miagy

Utente Attivo
2 Nov 2014
83
1
8
Ciao ragazzi, sto iniziando ad avere dei problemi con un codice che fino a settimana scorsa ha sempre funzionato alla perfezione e che non ho più toccato.
Passo qui di seguito a spiegare sommariamente.
Il mio sito è composto di diverse chat, le quali hanno uno specifico ID. Il sistema deve prendere tutti i dati raccolti di uno specifico user e, se superiori a 4 in quella specifica chat, viene assegnato un premio. Il premio può essere dato una sola volta al giorno (dunque se dopo aver ricevuto il premio cambio chat e scrivo altre 4 volte, il premio non viene dato, ma bisognerà aspettare il giorno dopo).

1) La prima cosa che faccio è valorizzare la data ultima di quando un utente ha ricevuto il premio:

PHP:
$result_premio = query("SELECT last_date_premio FROM user WHERE nome = '".$_SESSION['login']."'");
$last_date_premio = $result_premio['last_date_premio'];

2) La seconda cosa che ho fatto, è stabilire il range temporale. Il sistema deve calcolare tutti i risultati che partono dalle 6:00 AM alle 5:59 AM del giorno dopo (e non dalle 00:00 alle 23:59).

PHP:
//setto gli estremi temporali//
            $now = time();
            $this_morning = strtotime('today 6:00');
            $last_action = strtotime($last_date_premio);

3) Da qui parto con il conteggio:

PHP:
$check_actions = query("SELECT * FROM windows WHERE id_chat = ". $_SESSION['id_chat'] ." && user = '". $_SESSION['login'] ."' && DATE_ADD(ora, INTERVAL 12 HOUR)  >= NOW()", 'result');
            if(query($check_actions, 'num_rows') >= 4) {
//vedi spiegazione sotto
}

Se i risultati sono superiori o uguali a 4 (dunque nell'if num_rows), vedo se il premio non è stato assegnato nel range 6:00-5:59:


PHP:
if ($now - $last_action >= (24 * 60 * 60) || ($last_action < $this_morning && $now >= $this_morning))
            {
//assegno il premio e modifico il campo $last_date_premio a NOW()
            } else {
//Non assegno nulla perché il premio è già stato dato
}

Qui nasce il problema, perché credo non mi riconosca più il range temporale stabilito (6:00-5:59). Siccome non saprei spiegare precisamente il problema, lo illustro fornendo degli esempi:

28/11/2022

Inizio conversazione: 22:00
Quarto risultato: 00:30
-> Premio assegnato

29/11/2022

Inizio conversazione: 21:00
Quarto risultato: 23:30
-> Premio NON assegnato (e dovrebbe invece assegnarlo perché rientra nel nuovo giorno (6:00-5:59)

30/11/2022

Inizio conversazione: 15:00
Quarto risultato: 16:30
-> Premio assegnato (E questo mi fa capire che il problema del 29/11 credo nasca dal premio assegnato dopo la mezzanotte del 28/11)

C'è per caso un errore nel calcolo del range?
 
Ultima modifica:

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
436
73
28
Ciao, in questa riga mi pare ci sia un typo :
PHP:
if(query($check_actions, 'num_rows') => 4) {
l'operatore "maggiore o uguale" dovrebbe essere >=, nelle altre parti è scritto correttamente ma qui hai invertito i caratteri
 

miagy

Utente Attivo
2 Nov 2014
83
1
8
Ciao, in questa riga mi pare ci sia un typo :
PHP:
if(query($check_actions, 'num_rows') => 4) {
l'operatore "maggiore o uguale" dovrebbe essere >=, nelle altre parti è scritto correttamente ma qui hai invertito i caratteri
Ho sbagliato io a copiare, in realtà è >= anche nel file.
Dunque deduco che l'errore non sia nel calcolo del giusto, ma altrove.
Il calcolo del giorno 6:00-5:59 è giusto?
 

miagy

Utente Attivo
2 Nov 2014
83
1
8
Ok, ho la certezza che il bug nasca per la questione mezzanotte. Nello specifico, questo:

28/11/2022

Inizio conversazione: 22:00
Quarto risultato: 00:30 (dunque siamo al 29/11)
-> Premio assegnato

29/11/2022

Inizio conversazione: 21:00
Quarto risultato: 23:15
-> Premio NON assegnato (e dovrebbe invece assegnarlo perché rientra nel nuovo giorno (6:00-5:59)

30/11/2022

Inizio conversazione: 15:00
Quarto risultato: 16:30
-> Premio assegnato (E questo mi fa capire che il problema del 29/11 credo nasca dal premio assegnato dopo la mezzanotte del 28/11)

Quindi credo che, a questo punto, il problema sia nel calcolo del giorno del 28/11, che il sistema lo valuta come 29 ma che nell'ottica del range temporale appartiene ancora al 28/11 (perché il nuovo giorno l'ho settato dalle 6:00 alle 5:59). Nello specifico, ritengo sia qui:


PHP:
//setto gli estremi per il px//
            $now = time();
            $this_morning = strtotime('today 6:00');
            $last_action = strtotime($last_date_premio);

if ($now - $last_action >= (24 * 60 * 60) || ($last_action < $this_morning && $now >= $this_morning)) {
   
    //assegno il premio
}

Sono disperato!
Come posso specificare che se il premio viene ricevuto dopo la mezzanotte, questo fa parte del giorno prima, perché il giorno "nuovo" deve essere calcolato dalle 6 del mattino?
Vi prego :(
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
2) La seconda cosa che ho fatto, è stabilire il range temporale. Il sistema deve calcolare tutti i risultati che partono dalle 6:00 AM alle 5:59 AM del giorno dopo (e non dalle 00:00 alle 23:59).
come dire che oggi alle ore 14 del 16/12, puoi calcolare i risultati tra le 5.59 del 16/12 e le 6.00 del 15/12
non potendo aver registrato risultati nel "futuro" ovvero dopo le ore 14 di oggi
devi cioè calcolare i risultati tornando indietro non in avanti (non esistono)

ovvero il premio conseguito tra le 6.00 di oggi 16/12 e le 5.59 di domani 17/12 posso assegnarlo solo dopo le 5.59 di domani
mentre mi sembra che ragioni in avanti ......
 
Ultima modifica:

miagy

Utente Attivo
2 Nov 2014
83
1
8
come dire che oggi alle ore 14 del 16/12, puoi calcolare i risultati tra le 5.59 del 16/12 e le 6.00 del 15/12
non potendo aver registrato risultati nel "futuro" ovvero dopo le ore 14 di oggi
devi cioè calcolare i risultati tornando indietro non in avanti (non esistono)

ovvero il premio conseguito tra le 6.00 di oggi 16/12 e le 5.59 di domani 17/12 posso assegnarlo solo dopo le 5.59 di domani
mentre mi sembra che ragioni in avanti ......
Quindi mi consigli di agire così?

PHP:
$now - $last_action <= (24 * 60 * 60)
 
Discussioni simili
Autore Titolo Forum Risposte Data
A Contare n° totale oggetti da mysql PHP 5
A Contare gli elementi di un array PHP 13
maxnegri Contare sessioni aperte e creare condizione PHP 1
L contare record uguali in file csv PHP 4
B [MySQL] contare quante un oggetto e' presente MySQL 2
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
P [PHP] Contare quante volte uno stesso id si ripete nella tabella PHP 12
P [PHP] Contare i mesi con timestamp. PHP 8
C Contare numero record uguali Database 3
asevenx [Javascript] [AngularJS] contare opzioni selezionate di una select in un elenco ng-repeat Javascript 0
G [ACCESS2007]: contare li ultimi record con lo stesso valore in un campo, finchè il valore non cambia MS Access 2
xone [PHP] Contare numero dei giorni tra data_in e data_out PHP 11
zorro [PHP] Contare i record di una tabella PHP 6
F Contare le righe con php ad oggetti MySQL 0
asevenx Contare numero di righe in un form dinamico Javascript 5
F Miglior metodo per contare le righe di una query MySQL 2
S Contare valori uguali in una colonna PHP 2
N Contare post MySQL 2
L contare nodi figli di un determinato nodo madre XML 0
H Contare file presenti nella pagina PHP 3
S [RISOLTO]php contare numero delle query PHP 1
L Contare determinati valori che si ripetono in una tabella per un detemrinato ID MySQL 2
Monital Contare il numero di righe con php5 PHP 10
M contare record db con valore specifico PHP 1
Shyson Contare i caratteri user e dominio Javascript 57
D Contare numero div con una determinata classe Javascript 2
criric Contare le settimane di un mese Snippet PHP 3
nim contare record uguali in tabella PHP 10
anthares Contare record in tabella secondo certe condizioni PHP 21
Monital Contare valori uguali di un array e dividerli in una stringa PHP 12
nim contare frasi che si ripetono PHP 10
R Contare il numero di click su un link PHP 2
A contare iniziali dei nomi Java 3
G contare e sommare dopo JOIN Database 8
M non contare gli accessi dal tuo pc Supporto Mr.Webmaster 1
S Come contare i Download file .zip su html HTML e CSS 10
T contatore totale click e media in secondi PHP 7
G [PHP] totale per ogni id di un ciclo PHP 1
N [Java] Piccolo jform per calcolo totale da 2 campi i double Java 0
VPonticelli [VENDO] Pagine per un totale di 1.6 MLN di fan Annunci servizi di Social Media Marketing 3
elpirata Confusione totale progetto nuova infrastruttura HW Reti LAN e Wireless 4
P [PHP] somma totale imponibile e totale fattura PHP 3
Davide777 vendo due pagine facebook per un totale di 7.2k like a pochissimo Annunci servizi di Social Media Marketing 10
Guaroste14 Vendo PUBBLICITA' su account in totale 35.000 ISCRITTI. Annunci servizi di Social Media Marketing 0
G [Javascript] Ricalcolo Totale jQuery Javascript 7
VPonticelli [Vendo] Pacchetto di 5 pagine per un totale di 615.000 fan Annunci servizi di Social Media Marketing 8
D perchè non aggiorna il totale? Javascript 5
L Calcolo della percentuale PayPal che varia in base al totale. E-Commerce 1
F [RISOLTO]js function per impostare minimo totale Javascript 8
T Vendo 2 pagine facebook totale 33 mila fans Annunci servizi di Social Media Marketing 4

Discussioni simili