2012-10-02 17 views
5

Sono nuovo su php e ho un problema con la manipolazione di data/ora.Come raggruppare gli intervalli di tempo in php/mysql e ottenere statistiche basate su quei gruppi di tempo?

Ho bisogno di fare statistiche sulle visite giornaliere/mensili/annuali in qualche negozio. C'è un database mysql con la tabella "statistiche" e fields: "statistic_id" (integer, primary key) , "visitors" (integer), and "dateAndTime" (timestamp). Ho un modulo in cui l'utente immette il numero di visitatori che arrivano al negozio e quel numero è inserito nel database insieme all'ora e alla data usando la funzione now().

Quindi, in pratica il mio database assomiglia:

statistic_id , visitors , timeAndDate <br /> 
1............, 3........., 2012-09-29 14:45:02 <br /> 
2............, 5........., 2012-09-29 14:46:31 <br /> 
3............, 2........., 2012-09-29 18:48:11 ...etc. 

Che cosa devo fare è di somma e potrai vedere tutti i visitatori che sono venuti in intervallo di tempo specifico. 09h-12h ; 12h-15h ; 15h-18h ; 18h-21h. Quindi ho bisogno di visualizzare in tabella tutti questi intervalli e il numero di visitatori per ciascuno di essi. Il problema è che non so come estrarre questi intervalli e quindi ottenere la somma dei visitatori per loro. Stavo provando tutto quello che so e ho potuto trovare, ma senza successo. Dovrò anche ottenere statistiche mensili e annuali, quindi come posso ottenere tutto il 12 months da questa colonna timeAndDate e poi sum all visitors for each month?

Qualcuno ha un'idea di come farlo ed è disposto a spiegarmi nei dettagli per favore? Grazie

risposta

5

Per ottenere i visitatori tra le 09:00 e le 12:00

SELECT 
    SUM(`visitors`) 

FROM 
    `my_table` 

WHERE 
    HOUR(`timeAndDate`) BETWEEN 9 AND 12 

Per ottenere visitatori per mese

SELECT 
    MONTH(`timeAndDate`), 
    SUM(`visitors`) 

FROM 
    `my_table` 

GROUP BY 
    MONTH(`timeAndDate`) 

Per ottenere visitatori per anno

SELECT 
    YEAR(`timeAndDate`), 
    SUM(`visitors`) 

FROM 
    `my_table` 

GROUP BY 
    YEAR(`timeAndDate`) 

semplice esempio PHP per produrre i mesi in una tabella

<?php 

    // Connect to database 
    $db = mysqli_connect('localhost', 'root', 'root', 'test') or die('Could not connect to database'); 

    // Prepare sql question 
    $sql = "SELECT 
       MONTHNAME(`timeAndDate`) AS `month`, 
       SUM(`visitors`) AS `visitors` 

      FROM 
       `test` 

      GROUP BY 
       MONTH(`timeAndDate`)"; 

    // Query the database 
    $result = mysqli_query($db, $sql); 

    // Begin table 
    print '<table><thead><tr><th>Month</th><th>Visitors</th></tr></thead><tbody>'; 

    // Loop result 
    while($row = mysqli_fetch_assoc($result)) { 
     print "<tr><td>{$row['month']}</td><td>{$row['visitors']}</td></tr>"; 
    } 

    // End table 
    print '</tbody></table>'; 

?> 
+0

grazie per la risposta, ma come posso mostrare questo? Come posso visualizzare nella tabella la somma dei visitatori per ciascun intervallo di tempo? Thx – offline

+0

Aggiunto un rapido esempio alla risposta – lix

+0

Grazie mille sta funzionando. Ancora una domanda, non sono ancora sicuro, come posso visualizzare tutti e 4 gli intervalli di tempo del giorno e dei loro visitatori allo stesso tempo? Quindi dovrebbe essere 09h-12h: num. di visitatori; 12h-15h: num. di visitatori ... tutto risulta in una tabella – offline

0
SELECT DATE(timeAndDate), SUM(visitors) FROM Table 
WHERE 
DATE_FORMAT(timeAndDate,'%k') BETWEEN 9 AND 12 
AND YEAR(timeAndDate) = 2012 
GROUP BY MONTH(timeAndDate) 
+0

Come posso recuperare i risultati? Sto provando con: while ($ row = $ result-> fetch_array (MYSQLI_ASSOC)) {... Ma ottengo il messaggio di errore: chiama a una funzione membro fetch_array() su un oggetto non oggetto – offline

+0

testarlo di nuovo l'ho modificato un po ' – Martin

+0

Nessun errore, ma non ci sono risultati neanche. Sto cercando di recuperare i dati in questo modo: while ($ row = $ result-> fetch_array (MYSQLI_ASSOC)) {\t \t $ visitors = $ row ['SUM (visitatori)']; $ dateAndTime = $ row ['dateAndTime']; $ timestamp = strtotime ($ dateAndTime); \t echo " \t \t \t ".htmlentities ($ visitors, ENT_QUOTES, 'UTF-8'). " \t \t ". date (' H: i, dm-Y ', $ timestamp). " \t"; \t } Cosa c'è di sbagliato qui? – offline

Problemi correlati