-
calcolo tra due date
Salve a tutti.
Vorrei estrapolare dal db quanti valori sono stati inseriti tra due archi temporali o meglio ogni mese.
Ho provato così:
Codice PHP:
$sett= mysql_query("SELECT COUNT(*) FROM elenco WHERE data_odierna BETWEEN 2014-09-01 AND 2014-09-30");
Ma ottengo solo: Resource id #5
Come potrei fare ?
Grazie
-
Se sono più records (come penso che sia in questo caso) devi ciclarli:
Codice PHP:
$sett= mysql_query("SELECT COUNT(*) FROM elenco WHERE data_odierna BETWEEN 2014-09-01 AND 2014-09-30");
while($res = mysql_fetch_array($sett)){
echo $rs['data_odierna']; // $res conterrà tutti i record delle singole colonne usa $res['valore'] per accedere al dato
}
-
Codice PHP:
$sett= mysql_query("SELECT COUNT(*) AS count FROM elenco WHERE data_odierna BETWEEN 2014-09-01 AND 2014-09-30");
$res = mysql_fetch_assoc($sett);
echo $res['count'];
-
Grazie per le risposte.
Ho provato entrambi i suggerimenti.
Ma ottengo zero, come non ci fossero date inserite nel db.
Ho ricontrollato tutto, nel caso avessi sbagliato qualche dato. La tabella dove sono registrate le informazioni si chiama "elenco" e il campo di riferimento è "data_odierna". Le date sono nel formato americano aaaa-mm-gg e ci sono del db. Non capisco allora perchè visualizza zero come risultato. Mi sembra tutto corretto.
Cosa mi sfugge ?
Inoltre il mio scopo sarebbe quello di fare questo conteggio con tutti i mesi. Quindi non solo per settembre, ma poi anche per ottobre e così via, per avere un resoconto di ogni mese. Forse esite una strada migliore di quella intrappresa ?
Grazie di nuovo e buona serata
-
@intervallo
SELECT COUNT(*) FROM `elenco` WHERE data_odierna > "2014-10-01" AND data_odierna < "2014-10-30"
@mese
SELECT COUNT(*) FROM `elenco` WHERE MONTH(data_odierna) = 10 AND YEAR(data_odierna) = 2014
--------------------------------------------------------------------------------------------------$mese--------------------------------$anno
-
Grazie, ho provato anche quest'ultima soluzione, così:
Codice PHP:
$sett= mysql_query("SELECT COUNT(*) FROM elenco WHERE data_odierna > 2014-09-01 AND data_odierna < 2014-09-30 ");
echo $sett ;
Ma ottengo = Resource id #5
Idem con:
Codice PHP:
$sett= mysql_query("SELECT COUNT(*) FROM `elenco` WHERE MONTH(data_odierna) = 9 AND YEAR(data_odierna) = 2014");
echo $sett ;
-
$sett contiene il valore restituito da mysql_query che è l'identificativo di risorsa (o FALSE se c'è un errore).
Una volta ottenuto questo identificativo (resource id), devi usare la funzioen mysql_fetch. Come ti ha consigliato luffio al terzo post.
-
Grazie veramente a tutti di cuore.
Sono riuscito a fare questa query:
Codice PHP:
$sql="SELECT * FROM elenco WHERE MONTH(data_odierna) = 9 AND YEAR(data_odierna) = 2014 ";
//eseguo la query per settembre
$query=mysql_query($sql);
//ottengo il numero di righe per settembre
$sett=mysql_num_rows($query);
echo $sett;
$sql="SELECT * FROM elenco WHERE MONTH(data_odierna) = 10 AND YEAR(data_odierna) = 2014 ";
//eseguo la query per ottobre
$query=mysql_query($sql);
$ott=mysql_num_rows($query);
echo $ott;
Così funziona e mi calcola le righe inserite nella tabella per il mese interrogato, correttamente.
Adesso però vorrei ottimizzare lo script per tutti i mesi.
Sicuramente devo fare un ciclo, ma come ?
Devo estrapolare per ogni anno i dati da settembre a Luglio.
(Quindi per quest'anno mi serve poterlo fare da settembre 2014 a Luglio 2015.)
Grazie di nuovo a tutti per la partecipazione alla discussione e il prezioso aiuto.
-
Salve, ho elaborato questo script che funziona. A parte il controllo sull'anno.
Ecco come ho fatto :
Codice PHP:
$me = array(1 => 'gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic');
$mesi=1 ;
while($mesi<=12){
if ($mesi <=8) {
$anno= 2015; }
elseif ($mesi >8) {$anno= 2014;}
$sql="SELECT * FROM elenco WHERE MONTH(data_odierna) = $mesi AND $anno ";
$query=mysql_query($sql); //eseguo la query
$tot=mysql_num_rows($query); //ottengo il numero di righe
$me[$mesi]=$tot;
echo "valore del mese: " . $me[$mesi]. "<br>" ;
$mesi++;
}
La parte compresa dall'if per la selezione dell'anno però sembra non venir considerata.
Infatti somma tutti i valori mensili senza distinzione per l'anno.
Come potrei fare ? Grazie
-
"SELECT * FROM elenco WHERE MONTH(data_odierna) = $mesi AND $anno ";
...
intendi ?
"SELECT * FROM elenco WHERE MONTH(data_odierna) = $mesi AND YEAR(data_odierna) = $anno ";
-
Grazie FormularioDiDrakensang,
si, adesso è perfetto.