Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2011, 18h55   #1
Invité régulier
 
Inscription : mars 2007
Messages : 39
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 39
Points : 9
Points : 9
Par défaut Dernier enregistrement pour un ID

Bonjour, j'ai un petit peu de mal avec une requête qui à première vue me semblait pas si compliquée. (MySQL)

Alors voilà, j'ai une table qui enregistre les différentes "salles" parcouru par chaque session utilisateur avec l'heure d'entrée dans la salle et l'heure de sortie.




Pour un ID de session donnée le champs "start" du premier enregistrement correspond a la connexion et le champ "end" correspond à la déconnexion.

Pour des statistiques je voudrais pouvoir connaitre pour chaque salle combien de fois elle à été la salle de déconnexion.
J'ai pour commencé voulu afficher uniquement le dernier enregistrement pour chaque ID de session, mais je n'y suit pas arrivé.

Est quelqu'un à une idée ? (est ce que quelqu'un a compris mon problème )
BoyzInDaProject est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 20h45   #2
Membre du Club
 
Homme Frédéric
Inscription : juin 2011
Messages : 52
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 52
Points : 52
Points : 52
Essaie ça :
Code :
1
2
3
4
5
6
7
8
 
SELECT id_salle, COUNT(id_salle) 
FROM (
  SELECT id_session,id_salle ,max(end) 
  FROM T 
  GROUP BY id_session
) foo 
GROUP BY id_Salle
Je pense que ça fonctionne, mais je ne sais pas si c'est la bonne façon de faire.
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 22h23   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Ça ne fonctionnera pas car l'id_salle de la sous-requête sera aléatoire vu qu'il ne figure pas dans le GROUP BY.

Reprenons pas à pas...

1) Quel est le dernier end de chaque session ?
Code :
1
2
3
SELECT id_session, MAX(end) AS end_max
FROM la_table
GROUP BY id_session
2) À quelle salle correspond ce dernier end pour chaque session ?
Code :
1
2
3
4
5
6
7
8
9
10
SELECT t1.id_session, t1.id_salle
FROM la_table t1
INNER JOIN
(
	SELECT id_session, MAX(end) AS end_max
	FROM la_table
	GROUP BY id_session
) tmp 
	ON tmp.id_session = t1.id_session
	AND tmp.end_max = t1.end
3) Combien de fois chaque salle se retrouve t-elle la dernière salle d'une session ?
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT t1.id_salle, COUNT(t2.id_session) AS nb
FROM la_table t1
LEFT OUTER JOIN
(
	SELECT id_session, MAX(end) AS end_max
	FROM la_table
	GROUP BY id_session
) tmp 
	ON tmp.id_session = t1.id_session
	AND tmp.end_max = t1.end
GROUP BY t1.id_salle
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 06h38   #4
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Saluton,
J'ai juste une petite question.
Est-on certain que la deuxième requête ne retournera qu'une seule ligne par session ?
Autrement dit, le couple (id_session, end) est-il UNIQUE ?

Et une remarque :
END est un mot-clé de MySQL, il vaudrait mieux choisir un autre nom de colonne.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 13h49   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par Maljuna Kris Voir le message
Est-on certain que la deuxième requête ne retournera qu'une seule ligne par session ?
Je pense que oui car il n'y a qu'un end_max par session et c'est sur ces deux colonnes que porte la jointure.

Citation:
Autrement dit, le couple (id_session, end) est-il UNIQUE ?
Non mais comme dit au dessus, le couple {id_session, MAX(end)} oui.

Citation:
Et une remarque :
END est un mot-clé de MySQL, il vaudrait mieux choisir un autre nom de colonne.
Exact ! Je ne l'avais pas vu celui-là !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h01.


 
 
 
 
Partenaires

Hébergement Web