Requete pour stats journalieres

13 réponses
AuteurMessage

vincir |
Membre

 

Inscrit le : 26/10/2007

# Le 26/03/2010 à 09:22

Bonjour,

Est-il possible en une seule requete mysql de faire la chose suivante : J'ai une table avec des statistiques journalières pour des utilisateurs, mais chaque utilisateur n'a pas forcement des stats pour tous les jours. Je souhaiterais que ma requete me retourne pour chaque jour du mois, soit la valeur dans la base si il y a une stat pour ce jour, soit 0 si il n'y a aucune stat pour ce jour.
Je pourrais faire cela en le combinant avec du php, mais une solution pure mysql m'arrangerait vraiment.

Merci d'avance pour vos réponses
Vincent

http://www.vrdeveloppement.comOuvrir dans une nouvelle fenetre : réalisation de sites web et de logiciels personnalisés.

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 26/03/2010 à 09:45

regarde du coté de "left join" dans la doc

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

vincir | Vincent
Membre

 

Inscrit le : 26/10/2007

# Le 26/03/2010 à 09:46

Oui mais left join sur quoi ? Il faut que je crée une table avec tous les jours de l'année ? Ou alors je peut juste faire une requete qui retourne les jours du mois ?

http://www.vrdeveloppement.comOuvrir dans une nouvelle fenetre : réalisation de sites web et de logiciels personnalisés.

ddpetit | Damien
Modérateur

Photo de ddpetit

Inscrit le : 03/05/2006

# Le 26/03/2010 à 10:10

Salut Vincir,

Essaies quelque chose dans ce genre :


SELECT IFNULL(SUM(tonchamp), 0)
FROM tatable

Loccasion.com - Vente de voitures d'occasionOuvrir dans une nouvelle fenetre - Mandataire AutoOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 26/03/2010 à 10:11

Ah pardon, j'avais lu que tu voulais les "utilisateurs" à 0.

Dans ce cas là, moi je récupère toutes les stats dans un tableau puis en PHP je prends la date de début, et j'incrémente les jours jusqu'à la date de fin et affiche s'il y a un truc dans le tableau. Je pense pas que tu puisses demander à MySQL de te renvoyer des éléments qui n'existent pas.

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

devtribu | Olivier
Modérateur

Photo de devtribu

Inscrit le : 16/06/2005

# Le 26/03/2010 à 10:13

Tu fais une jointure externe entre ta table user et la table des stats pour chaque jour
Tu auras tous les résultats par user pour le jour choisi

Février 2019, mon futur livre Tout JavaScript chez Dunod https://amzn.to/2PoLd0fOuvrir dans une nouvelle fenetre

vincir | Vincent
Membre

 

Inscrit le : 26/10/2007

# Le 26/03/2010 à 11:22

En fait j'ai du mal m'exprimer.
Voici un exemple

2010-03-01 user1 97
2010-03-03 user1 102
2010-03-06 user1 27

Je voudrais une requete qui me retourne
01 97
02 0
03 102
04 0
05 0
06 27

http://www.vrdeveloppement.comOuvrir dans une nouvelle fenetre : réalisation de sites web et de logiciels personnalisés.

devtribu | Olivier
Modérateur

Photo de devtribu

Inscrit le : 16/06/2005

# Le 26/03/2010 à 11:28

si c'est indispensable de le faire en une seule requete sql, tu crées une table contenant tous les jours
la jointure externe entre la table des jours et la table de stats te retournera ce que tu attends

Février 2019, mon futur livre Tout JavaScript chez Dunod https://amzn.to/2PoLd0fOuvrir dans une nouvelle fenetre

bhamp0 | Benjamin
Membre

Photo de bhamp0

Inscrit le : 09/05/2005

# Le 26/03/2010 à 11:41

Si tu as suffisamment de stats, et que donc tous tes jours sont présents au moins une fois (mais pas forcément pour chaque utilisateur), c'est faisable avec quelque chose du genre :


SELECT s1.date AS date, SUM(s2.count) AS count
FROM stats AS s1
LEFT JOIN stats AS s2 ON s2.date = s1.date AND s2.user = "user1"
GROUP BY s1.date

Quand on voit c'qu'on voit, et qu'on entend c'qu'on entend, on a raison d'penser c'qu'on pense !

cerise | Gaël
Modérateur

Photo de cerise

Inscrit le : 31/10/2008

# Le 26/03/2010 à 13:25

pourquoi tu t'emmerdes ? Une requete par user et c'est réglé

vincir | Vincent
Membre

 

Inscrit le : 26/10/2007

# Le 26/03/2010 à 13:51

bhamp0 > Je n'ai pas la garantie d'avoir des stats pour chaque jour
cerise > La requete se fera pour un user à la fois, mais mon problème vient des trous dans les dates.

http://www.vrdeveloppement.comOuvrir dans une nouvelle fenetre : réalisation de sites web et de logiciels personnalisés.

tonguide | Jeremy
Modérateur

 

Inscrit le : 09/05/2005

# Le 26/03/2010 à 13:53

Le plus simple est quand même ce que dit Rano ... ça prend 2 minutes à faire et tu ne te prends pas la tête pour rien.

vincir | Vincent
Membre

 

Inscrit le : 26/10/2007

# Le 26/03/2010 à 13:55

Oui c'est sur, c'est juste que ça me demande de changer mon cote php car là j'avais une bibliothèque qui s'occupait de l'affichage en lui passant juste une requete.
Je demandais au cas ou une requete aurait existé (je ne trouve même pas de requete permettant de retourner une liste de 1 à 31 par exemple)

http://www.vrdeveloppement.comOuvrir dans une nouvelle fenetre : réalisation de sites web et de logiciels personnalisés.

cerise | Gaël
Modérateur

Photo de cerise

Inscrit le : 31/10/2008

# Le 26/03/2010 à 14:29

mais dans ce cas, c'est vrai, la solution de Rano est de loin la plus simple

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 1:42:13 | Généré en 54.95ms | Contacts | Mentions légales |