2012-02-10 4 views
1

J'ai une table qui enregistre mes statistiques de téléchargement/téléchargement par 15 minutes.Base de données avec horodatage, afficher un mois distinct

C'est ce que la table ressemble

 
| ID | timestamp | upload | download | packetssent | packetsreceived 
| 1 | 1328828401 | 343245 | 93473463 | 4343423  | 3435664 
| 2 | 1328829301 | 343245 | 93473463 | 4343423  | 3435664 

Ce que je veux est quand vous venez d'abord sur la page que vous voyez le téléchargement/upload au total. Et puis une liste des mois disponibles. (Donc, actuellement, c'est seulement Février), Une fois que vous cliquez sur un mois, il affichera le jour et leurs totaux, lorsque vous cliquez sur un jour, vous verrez tous les enregistrements pour ce jour

J'ai besoin de conseils comment fais ceci.

Merci à l'avance

+0

SÉLECTIONNEZ le mois (horodatage), sum (packetssent) du groupe de tables par mois (horodatage) cela vous intéresse? Vous avez également le jour et l'année – CoolStraw

+0

SELECT mois (horodatage), somme (packetssent) du groupe de tableau par mois (horodatage) >> Renvoie null Ce que je veux, c'est quand vous venez en premier sur la page que vous voyez le téléchargement total . Et puis une liste des mois disponibles. (Donc, actuellement, c'est seulement Février), Une fois que vous cliquez sur un mois, il affichera le jour et leurs totaux, lorsque vous cliquez sur un jour, vous verrez tous les enregistrements pour ce seul jour. – Brantje

+0

En fonction de votre utilisation, vous voudrez peut-être dénormaliser ces données et construire des tables agrégées quotidiennes/mensuelles pour éviter d'effectuer les mêmes requêtes sur ce qui est effectivement des données statiques. – liquorvicar

Répondre

1

Effectuez les opérations suivantes (pour l'année en cours):

SELECT 
    FROM_UNIXTIME(timestamp, "%m") AS m, 
    FROM_UNIXTIME(timestamp, "%Y") AS Y, 
    SUM(packetssent) AS sent, 
    SUM(packetsreceived) AS received 
FROM atable 
GROUP BY Y, m HAVING Y=YEAR(NOW()) 
+0

Merci, fonctionne bien :) – Brantje

0

Je pense que vous pouvez utiliser

SELECT DISTINCT MONTH(DATE(timestamp)) FROM Table. 

Vous pourriez sortir avec

SELECT DISTINCT MONTH(timestamp) FROM table. 

mais si vous pouvez le documentation pour la fonction MOIS() ne fonctionne pas déclarez que vous pouvez lui transmettre un horodatage.

+0

Est-ce que cela ne sélectionnera pas toutes les lignes pour le même mois d'années différentes? Peut-être que c'est ce que veut le PO, mais s'il veut le limiter à des années précises, devra-t-il aussi sortir l'année de l'horodatage? – GordonM

+0

Aye; Si le PO veut diviser davantage d'ici l'année, alors ils devront prolonger le dessus en conséquence, mais ils ne l'ont pas demandé, donc je vais le laisser pour le moment. – CBusBus

+0

Assez juste. Je pensais que je l'obtiendrais là;) – GordonM

2

Pour extraire les différentes valeurs, utilisez la date/fonctions de temps dans MySQL

DAY(from_unixtime(timestamp)) 
MONTH(from_unixtime(timestamp)) 
YEAR(from_unixtime(timestamp)) 

HOUR(FROM_UNIXTIME(timestamp)) 
MINUTE(FROM_UNIXTIME(timestamp)) 
SECOND(FROM_UNIXTIME(timestamp)) 

Vous pouvez les utiliser dans group by sections pour extraire vos informations en fonction d'une variété de temps cadres

Jetez un oeil à: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html pour une liste complète

+0

+1 bien que FROM_UNIXTIME (t, "% d"), FROM_UNIXTIME (t, "% m"), FROM_UNIXTIME (t, "% Y"), etc peuvent éviter le supplément appel de fonction dans la syntaxe – Cez

Questions connexes