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 :

[MySQL] Conception de deux requêtes complexes


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut [MySQL] Conception de deux requêtes complexes
    Bonjour,

    Dans le cadre d'un stage que j'effectue cette année, il m'est demandé de réaliser des requêtes "statistiques" sur une table d'historique.

    Cet historique contient deux camps clef, une heure et une action déterminée

    La premiere étape est de pouvoir réaliser une vue permettant de voir quelles sont les "pointes d'accès" en fonction de l'heure.

    La seconde (la plus complexe) est de déterminer les actions qui sont souvent effectuées en meme temps, cad :
    si plusieur fois le meme utilisateur effectue les actions dans un ordre quelcquonque mais qu'il les faits dans les 10 minutes alors, ces actions sont considérées comme dépendantes.

    Donc en sélectionnant un utilisateur, on devrait pouvoir voir les combinaisons les plus fréquentes qu'il a effectué...

    Je sais pas si cela est clair mais j'espère que vous comprendrez...
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Citation Envoyé par Vesta
    Cet historique contient deux camps clef, une heure et une action déterminée
    [...]
    Donc en sélectionnant un utilisateur, on devrait pouvoir voir les combinaisons les plus fréquentes qu'il a effectué...
    Tu ne précises pas où se trouve l'utilisateur dans ta structure de données, ni le SGBD que tu utilises.
    As-tu lu ceci avant de poster ?

    Donne-nous les prémisses de tes requêtes, nous pourrons t'aider à les mettre au point

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 137
    Points : 160
    Points
    160
    Par défaut
    Salut,

    Qu'entends tu par point d'accès ? Moi je ne vois que deux champs 'heure' et 'action'.

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Je suis sous MySQL, la table comprend trois champs :
    accesid int
    accesstime time
    action varchar 3

    l'action est un code de lettres qui represente le type d acces

    j entend par pointes d'acces les moments ou les acces sont les plus nombreux...

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Citation Envoyé par Vesta
    Je suis sous MySQL, la table comprend trois champs :
    accesid int
    accesstime time
    action varchar 3

    l'action est un code de lettres qui represente le type d acces

    j entend par pointes d'acces les moments ou les acces sont les plus nombreux...
    Quelle version de MySQL ? (accepte ou non les sous-requêtes !)

    Où est l'utilisateur là-dedans ?

    Un "moment" n'est pas une unité de mesure : une seconde, une minute, un quart d'heure, une heure ?

  6. #6
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Et tu n'as jamais fait de MySQL ? Essaye de faire un petit schema explicatifs et un resume de ce que tu veux faire + comment sont faites les tables. Ca ne me parait pas bien complique en tout cas ?

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Non je n'ai jamais vraiment utilisé Mysql, je suis abitué à de simples requêtes SQL (genre celles qu'on peut oire dans access)
    Je ne sais pas si ma version accepte les sous requetes (MySQL 5.0.27)

    Je suis en train de créer ces requetes avec les GUI tools de mysql, est ce qu'ils pourraient limiter les possibilités de celui-ce:
    exemple : je voulais utiliser la fonction DATEDIFF(expr,expr2) il me dis que cela n'existe pas...

    Et tu me demande l'utilisateur? l'utilisateur pour créer les requetes? c'est test (il a tout les droits nédcéssaires)

    Désolé si je ne suis pas assez clair et merci de ton aide

  8. #8
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    MySQL en version 5 accepte les sous-requetes ; toutefois n'oublie pas que tu peux effectuer des jointures
    Je te conseille de passer sur le site de mysql, leur aide est vraiment bien faite.

    Sinon je ne te demandais pas l'utilisateur et ses droits, mais plutot les shémas de tes tables.

    Au passage, a quel moment considère tu qu'il y a un pic de requêtes ?

  9. #9
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Je ne parle pas de pic de requetes, :-)
    j'entend par la savoir en fonction des données de l'historique (heure d'acces), pouvoir compter le nombre d'utilisateurs:
    ex :
    entre 12h et 13h il y a 212 enregistrements dans cette table
    (cad que accesstime est compris entre 12 et 13h)
    entre 13h et 14h il y a 100 enregistrements dans cette table


    Je ne suis peu etre pas clair, cette table est un historique d'accès.
    A chaque fois qu'on utilise le programme, il log l'heure l'heure, le type d'action, et l'utilisateur.

    Schéma de la table historique :

    - accesid int (ref de l'utilisateur)
    - accesstime time (heure d'accès)
    - action varchar 3 (ex : 'mod' , 'per', 'car', 'bil', 'fre', ...)

  10. #10
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Ok. Ben ca me parait simple.
    Tu compte le nombre de logins different situe entre telle heure et telle heure?

  11. #11
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Oui c'est bien cela.

    La seconde requête que je voudrais faire est surement la plus compliquée, je ne sais pas si tu as une idée pour celle la...

  12. #12
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT COUNT(*) FROM historique
    WHERE accesstime BETWEEN Heure1 AND Heure2
    ??

  13. #13
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    J'aurais plutôtt dit du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT count(login) FROM historique
    WHERE accesstime >= time(...) AND accesstime <= timeadd(...);
    Il faut le nombre d'utilisateurs different, pas le nombre de requetes...

    Pour la deuxieme requete, et bien on verras ca demain, car il se fait tard

  14. #14
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    En fait tu peux expliciter un peu ?

    La seconde (la plus complexe) est de déterminer les actions qui sont souvent effectuées en meme temps, cad :
    si plusieur fois le meme utilisateur effectue les actions dans un ordre quelcquonque mais qu'il les faits dans les 10 minutes alors, ces actions sont considérées comme dépendantes.

  15. #15
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Oui si tu veux mais ca :
    Pour la premiere:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*) FROM historique
    WHERE accesstime BETWEEN Heure1 AND Heure2
    pour between '00:00' et '00:30', '00:30' et '01:00', '01:00' et '01:30', ...
    pour plusieurs heures

    Résultat devrait être comme ceci
    '00:00' et '00:30' 122
    '00:30' et '01:00' 95
    '01:00' et '01:30' 88
    ...
    '23:30' et '24:00' 132

  16. #16
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Attention cela prendras en compte le nombre d'action, pas le nombre d'utilisateurs.

  17. #17
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Citation Envoyé par Anthony.Desvernois
    En fait tu peux expliciter un peu ?
    Pour la seconde requete je vais essayer de trouver une autre facon de l'expliquer...

    Imaginons, un historique sous cette forme pour simplifier la compréhension du problème:
    Une personne a son Userid, elle passe tout les jours par une borne de pointage, ou sont logués son Userid, la date et l'heure de passage.

    --> Userid, datein, timein

    Je souhaiterai connaitre les personnes qui entrent souvent avec un membre précis, en quelques sortes trouver ses collègues.
    Les critères pour considérer qu'ils sont colllègues c'est que ceux-ci sont rentrés plusieurs jours environs en même temps (a 5 min près)


    Je ne sais pas si c'est assez clair mais c'est la meilleure manière d'expliquer mon problème

  18. #18
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Tres clair, merci.

    Je vais y reflechir, mais ceci dit, je me demande si c'est bien legal ? Deja, au niveau moral je trouve ca moyen, mais bon...apres tout je ne sais pas le but de ceci.

  19. #19
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    L'exemple que je t'ai donnés n'est qu'une facon de t'expliquer de facon claire ce que je souhaite...
    C'est juste pour comprendre le principe pour faire ce genre de requpetes...

    Merci pour tout...

  20. #20
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Ok alors [je suis un peu a la masse]

    J'aurais besoin d'un peu plus de detail : tu developpe sous quel plateforme, et en quel langage ?

    Au passage je craint que ce script soit vraiment lourd a faire tourner (contrairement a l'autre)

Discussions similaires

  1. Conception requête complexe
    Par HadanMarv dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/02/2012, 11h51
  2. Requête complexe MySQL
    Par fre3d0m dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/03/2009, 19h27
  3. [MySQL 5.0] Requête complexe
    Par TheDoci dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 13/07/2007, 16h44
  4. [MySQL 4] Requête complexe.
    Par prgasp77 dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/04/2007, 21h25
  5. Requête complexe mySQL
    Par sonic64 dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/04/2007, 15h54

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