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 :

Aide a la creation de requete complexe


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Aide a la creation de requete complexe
    Bonjour a tous,

    J'essaye actuellement de creer une requete reccuperant des donnees sur trois tables differentes.

    La premiere table, appelons la users, contient un id, et un nom
    La deuxieme, appelons la liaison, contient users_id et table3_id
    La derniere, appelons la table3, contient un son id, et un champs date en datetime, et des informations superflu dans notre cas

    Le but, est de reccuperer les 10 users qui ont le plus de champs dans la table3 sur la derniere semaine, et dans le cas ou il n'y en a moins de 10, agrandir cette derniere semaine a un delai plus long, pour avoir a chaque moment 10 resultats.

    J'ai galerer pas mal, fait des recherches sur google, mes requettes ne fonctionnent pas.

    En esperant que qqn puisse m'aiguiller,
    Merci d'avance !
    Cordialement

  2. #2
    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
    Pourriez vous postez vos requetes, afin d'avoir une idée sur votre méthode ?

    Cordialement
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je voyais quelque chose dans ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(t.id), u.name FROM table3 AS t, liaison AS l, user AS u WHERE TO_DAYS(NOW()) - TO_DAYS(t.begin_date) <= 100 AND t.id = l.table3_id LIMIT 10
    sans succès...

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je me permet de completer mon post en detaillant d'avantage mes tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    table user:
     
    id - int
    name - varchar
     
    -------------------
     
    table link
     
    id_user - int
    id_tab3 - int
     
    -------------------
     
    table tab3
     
    id - int
    begin_date - datetime
    Je souhaite donc reccuperer 10 users, en les classant par le nombre d'element poste dans tab3 de la derniere semaine (la table link servant a savoir quel element poste correspond a quel user).

    Cordialement

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Sur la période la semaine dernière, qu'est ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT u.name, COUNT(*) as nb
      FROM user AS u
      join liaison AS l on l.id_user = u.id
      join table3 AS t  on t.id = l.id_tab3 
     WHERE YEARWEEK(t.begin_date,1) = YEARWEEK(DATE_SUB(CURRENT_TIMESTAMP interval 7 day),1)
     group by u.name
     order by nb desc, u.name
     LIMIT 10
    Mais s'il faut rajouter des users sur une période élargie non détermineée c'est plus compliqué car il faut choisir la période avant d'exécuter la requête.
    Donc essaie peut être sans filtrer la période, mais en dénombrant les lignes sur la période semaine précédente et nombre total, quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT u.name, COUNT(*) as nb,
           sum(case when YEARWEEK(t.begin_date,1) = YEARWEEK(DATE_SUB(CURRENT_TIMESTAMP interval 7 day),1) then 1 end) as nb_semaine
      FROM user AS u
      join liaison AS l on l.id_user = u.id
      join table3 AS t  on t.id = l.id_tab3
     group by u.name
     order by nb_semaine desc, nb desc, u.name
     LIMIT 10
    Niveau perf c'est probablement pas terrible de ne pas filtrer les données, il serait préférable de déterminer une période, comme 2 semaines ou 1 mois.

Discussions similaires

  1. Aide pour réaliser une requete complexe
    Par zaghi dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 11/10/2012, 11h51
  2. aide pour une requet complexe
    Par agnaou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/07/2009, 22h10
  3. Requete complexe, demande d'aide
    Par bucheron007 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/11/2008, 15h19
  4. besoins d'aide creation de requete
    Par jameson dans le forum SQL
    Réponses: 9
    Dernier message: 20/03/2008, 13h45
  5. Aide requete complexe
    Par Sabine78 dans le forum Access
    Réponses: 9
    Dernier message: 18/04/2006, 21h28

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