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

Requêtes MySQL Discussion :

nombre de sessions consecutives


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 32
    Points
    32
    Par défaut nombre de sessions consecutives
    Bonsoir tout le monde!

    J'ai une table data_client qui me donne les details de tous les downloads qui ont eu lieu sur le mois de janvier.
    le id represente un identifiant unique pour chaque personne, le timestamp_start(datetime) et end , la date au debut et a la fin du telechargement, et device me renseigne sur la methode de telechargement.

    Je souhaiterai calculer le nombre de telechargements consecutifs sur le moins janvier pour un type de device donné (prenons le device 'telephone'), je considere qu'ils sont consecutifs si le temps entre 2 telechargements est inferieur a 3 secondes et qu'il est effectué par la meme personne.
    (timestamp_start du 2nd telechargement doit avoir lieu dans les secondes qui suivent le timestamp_end du 1er telechargement)

    voila ma requete:
    SELECT DISTINCT t1. *
    FROM data_client t1, data_client t2
    WHERE t1.id = t2.id
    AND (t1.timestamp_start - t2.timestamp_end) < 3
    AND t1.device ='telephone'
    AND t2.device ='telephone'

    mais bien entendu , cela ne marche pas, le nombre de reponses est bien trop grand.
    Ou se trouve mon erreur ?
    merci d'avance pour votre aide!

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: nombre de sessions consecutives
    Citation Envoyé par clancy182
    Ou se trouve mon erreur ?
    euuuuuh... laquelle? (parce qu'en fait, il n'y en a pas qu'une)


    Au niveau de la jointure:
    - tu utilises un produit cartésien et un WHERE. Ce n'est pas très conseillé: il vaut mieux utiliser un INNER JOIN, au moins on fait la différence entre les conditions de jointure et les conditions de restriction

    - les conditions de jointure ne sont pas bonnes et c'est pour cela que tu as trop de résultats. Ce qui caractéristique tes dowlnloads successifs, c'est qu'ils portent sur le même "device", la même personne (condition que tu as oublié) et ont lieu à 3s d'intervalle

    Au niveau de l'intervalle de temps:
    - tu as interverti les heures de début et l'heure de fin (en fait, il doit s'écouler maximum 3s entre la fin du téléchargement 1 et le début du téléchargement 2, c'est ça?)

    - les TIMESTAMP sont des entiers non signés, il faut donc faire attention quand on effectue des soustractions dessus à bien faire un CAST(... AS SIGNED) avant, ou à prendre le problème dans l'autre sens (ajouter 3s à l'heure de début et comparer à l'heure de fin)


    Voilà pour les corrections:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT t1.* 
     
    FROM data_client t1
    INNER JOIN data_client t2 
    USING (device, username)
     
    WHERE t1.device = 'telephone' 
    AND t2.timestamp_start < t1.timestamp_end + 3
    Ca devrait aller un peu mieux maintenant (en espérant que ça réponde à ton problème).

    Enfin, quand la requête te renverra les bons enregistrements, pense à faire un COUNT à la place.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    hello

    merci pour ta réponse, je vais essayer de clarifier la chose à mon tour.

    Je n'ai pas oublié de condition de jointure 'sur la meme personne' , j'ai fait un where sur les 'id' , les id sont les identifiants uniques pour chaque utilisateur.
    D'ailleurs, j'utilise presque toujours un produit cartesien avec des where pour mes jointures, j'ai pas trouvé d'explications claires sur le manuel mysql concernant les autres types de jointure...

    Comme tu dis ,il doit s'écouler maximum 3s entre la fin du téléchargement 1 et le début du téléchargement 2 d'ou le t1.timsetamp_start - t2.timestamp_end
    je considere que le dl t1 vient apres le t2 mais effectivement, c'est pas trés logique, autant dire que t2 vient apres le t1 tout simplement.
    Mais si je fais un t2.timestamp_start < t1.timestamp_end + 3
    je prend egalement en compte le cas ou t2.timestamp_start < t1.timestamp_end !
    alors que je devrai seulement prendre en compte ceux la :
    t1.timestamp_end < t2.timestamp_start < t1.timestamp_end + 3

    je vais donc rajouter cela:
    AND t2.timestamp_start >= t1.timestamp_end
    AND t2.timestamp_start < t1.timestamp_end + 3

    Encore merci pour ta réponse

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par clancy182
    D'ailleurs, j'utilise presque toujours un produit cartesien avec des where pour mes jointures, j'ai pas trouvé d'explications claires sur le manuel mysql concernant les autres types de jointure...
    Heureusement, on a ce qu'il faut sur developpez:
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    Et si il y a quelque chose que tu ne comprends pas, il suffit de poser une question sur le forum.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    arf, j'ai plus d'excuses

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Points : 671
    Points
    671
    Par défaut
    Je rajoute même que je ne vois pas l'interet du distinct dans la requete.

    Tu fais un distinct sur t1.*

    Hors si T1 a une clé primaire, le * renverra obligatoirement des lignes distinctes.

    Le distinct est donc inutile...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment limiter le nombre de sessions d'un utilisateur?
    Par nmathon dans le forum Sécurité
    Réponses: 19
    Dernier message: 28/03/2007, 11h26
  2. Voir le nombre de sessions ouvertes
    Par lihe dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 30/01/2007, 21h59
  3. [Sécurité] Nombre de session active
    Par krfa1 dans le forum Langage
    Réponses: 8
    Dernier message: 03/04/2006, 15h05
  4. nombre de sessions actives.
    Par samsso2005 dans le forum Langage
    Réponses: 3
    Dernier message: 17/01/2006, 19h16
  5. [JSP][TOMCAT] Afficher le nombre de sessions en cours
    Par kitov dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 24/05/2004, 13h48

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