IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requete de stats plutôt velue...


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut Requete de stats plutôt velue...
    Bonjour,

    Je dois réaliser des stats à partir de résultats enregistrés dans un base de données MySQL.
    La table n'est pas modifiable et la façon d'insérer les enregistrements non plus...
    Comment faire pour connaitre le temps passé par un utilisateur sur les différents serveurs ?

    J'ai une table
    Connexion( id, idServeur, date, heure, type, idUser)

    Remplie comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    15573 | 1 | xxxx-xx-xx | xx:xx:xx | D | 20    = Connexion du user 20 sur le serveur 1
    15824 | 1 | xxxx-xx-xx | xx:xx:xx | A | NULL  = Déconnexion du user 20
    15953 | 2 | xxxx-xx-xx | xx:xx:xx | D | 20    = Connexion du user 20 sur le serveur 1
    15956 | 2 | xxxx-xx-xx | xx:xx:xx | A | NULL  = Déconnexion du user 20
    ...
    Je peux bien entendu avoir entre un D et un A d'autres enregistrements correspondant à d'autres utilisateurs.

    Y'a t'il un moyen d'arriver au resultat que je recherche sans faire trop de requetes gourmande ?
    Du genre récupérer tous les enregistrements pour le serveur 1, 2, 3, ..., n, puis par prog épurer les résulats pour ne garder que les D correspondant à l'utilisateur recherché et le A suivant (qui correspond à la déconnexion)... Parce que je peux atteindre plusieurs dizaines de serveurs avec des milliers de connexions par jour, ce qui me ferait un énorme select pour ne resortir si ca se trouve que 4 enregistrements si le gars s'est connecté 2 fois...

    Merci à l'ame charitable qui pourra me tirer de là

  2. #2
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Bonjour,

    une requête qui te renvoie tous les enregistrements correspondants à un utilisateur donné, et triés dans le temps ne te convient pas ? Je pense à un truc dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select idServeur, date, heure from table
    where idUser=xx
    order by idServeur, date, heure
    Qui fait en premier temps un tri par serveur, et pour chaque serveur un tri dans le temps. Et vu qu'une connexion est forcément avant une déconnexion (sauf plantage), tu dois avoir toujours un D,A,D,A etc.

    Bon courage
    "Don't think you are, know you are..." (Morpheus)

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    merci de ta réponse Neo41.

    Le problème c'est qu'avec la requete que tu me propose, je ne vais récupérer que les connexions de mon user.
    Comment faire ensuite pour récupérer la déconnexion qui va bien avec chaque connexion pour pouvoir calculer le temps passé sur le serveur (car une deco n'est pas identifiée [cf. exemple: NULL]) ?
    Tel est le problème...

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si plusieurs utilisateurs peuvent être connectés en même temps, je ne vois pas de solution (comment savoir à qui correspond le A ?)
    Si on est sur qu'il n'y a qu'un seul utilisateur à la fois et que chaque connexion dure au moins une seconde, Essaye (j'ai supposé que les date était des chaines de caractères au format YYYY-MM-DD, sinon il faudra faire quelques adaptations):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT a.IdServeur, a.Date, a.Heure, b.Date, b.Heure
    FROM   Connexion a INNER JOIN Connexion b ON a.IdServer = b.IdServer
    WHERE  a.Type = 'D'
      AND  b.Type = 'A'
      AND  a.Date || a.Heure < b.Date || b.Heure
      AND NOT EXISTS (SELECT NULL 
                      FROM   Connexion c
                      WHERE  c.IdServer = a.IdServer
                        AND  c.Date || c.Heure > a.Date || a.Heure
                        AND  c.Date || c.Heure < b.Date || b.Heure)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Effectivement j'avais pas vu que l'enregistrement de déconnexion ne contient pas l'ID user. Mais d'ailleurs pourquoi c'est fait comme ça ?? ça n'a aucun sens de ne pas mettre l'id du user qui s'est déconnecté.

    Bon courage
    "Don't think you are, know you are..." (Morpheus)

Discussions similaires

  1. Requete de stat qui plante quand rien pour un mois
    Par Christophe P. dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/02/2007, 18h35
  2. Stats : connaitre en temps reel les requetes en cours d'exec
    Par jeff37 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/12/2004, 17h01
  3. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  4. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51
  5. [Kylix] Requetes Kylix pour postgres
    Par Miltown dans le forum EDI
    Réponses: 1
    Dernier message: 29/05/2002, 20h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo