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 :

Problème de jointure


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 1
    Par défaut Problème de jointure
    Bonjour à toute la communauté,

    J'ai un souci de jointure assez complexe. Je vais essayer d'être précis.

    J'ai 4 tables dont la table users,stats_affichages,stats_clicks et bannieres

    les tables en gros :
    users : id,nomsite,..
    stats_affichages: id,users_id,bannieres_id,nb_affich,date_time,ip
    stats_clicks: id, user_id, nb_click,date_time,ip
    bannieres:id,nom_banniere

    la table users est lié aux 2 tables stats
    (users.id -> stats_affichages.users_id , users.id -> stats_clicks.users_id )
    et la table bannieres est liés egalement aux 2 tables stats de la mm facon.

    Sachant que je souhaite afficher les résultats de la maniere suivante:

    nomsite(users) | id(user) | total click | total affich
    -----------------------------------------------------------
    ----------------nom_banniere | 1000 | NULL
    ----------------nom_banniere | 200 | 400
    ----------------nom_banniere | 50 | 80

    nomsite2(users) | id2(user) | total click | total affich
    -----------------------------------------------------------
    ----------------nom_banniere | nb_click | nb_affich
    ----------------nom_banniere | nb_click | nb_affich
    ----------------nom_banniere | nb_click | nb_affich



    il est possible que des nb_clicks ou des nb_affich n'existent pas pour une banniere donnée.

    J'ai donc deduis qu il fallait 2 requetes, une pour l'entete et l'autre pour le sous tableau dans 2 boucles imbriqués en php puisque c'est le langage que j'utilise .=)

    J'ai essayer plusieurs fois, jamais le bon resultat.

    voila ou j'en suis pour l entete:

    select SUM(DISTINCT nb_click) as totalclick, SUM(DISTINCT nb_affich) as totalaffich , nom_site,us.id as userid
    FROM users as us
    LEFT OUTER JOIN stats_clicks as stc
    ON us.id=stc.users_id
    LEFT OUTER JOIN stats_affichages as sta
    ON us.id=sta.users_id
    GROUP BY nom_site
    ORDER BY totalclick DESC

    et pour le sous tableau :

    SELECT stc.nb_click as click,sta.nb_affich as affich, ban.nom as nom
    FROM banniere as ban
    LEFT OUTER JOIN stats_clicks as stc
    ON ban.id=stc.bannieres_id
    LEFT OUTER JOIN stats_affichages as sta
    ON ban.id=sta.bannieres_id
    WHERE us.id = '".$r['userid']."

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Il faut que tu rajoutes les éléments en gras :

    pour l'en-tête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select SUM(DISTINCT nb_click) as totalclick, ...
    GROUP BY nom_site , us.id
    ORDER BY totalclick DESC
    pour le sous-tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT stc.nb_click as click,sta.nb_affich as affich, ...
    WHERE us.id = '$r[userid]'
      AND nom_site = '$r[nom_site]'
    Citation Envoyé par Segal
    J'ai donc deduis qu il fallait 2 requetes, une pour l'entete et l'autre pour le sous tableau dans 2 boucles imbriqués en php puisque c'est le langage que j'utilise .=)
    Essaie déjà comme ça. Ensuite, quand ça marchera avec tes deux boucles imbriquées, tu pourras optimiser en groupant tes deux requêtes dans une UNION avec un ORDER BY judicieux...

    --
    Antoun

    Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
    http://www.microapp.com/livre_mysql_7873.html

  3. #3
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Les 'SUM(DISTINCT nb_click)' me semblent louches. Dans ce contexte ne sommer que les valeurs différentes est faux : cliquer 3 fois et encore 3 fois ne fait pas 3 clics !

    En outre ce serait bien de savoir exactement en quoi tes requêtes ne donnent pas de bons résultats pour mieux cadrer ce qui leur manque (parce que la deuxième semble assez bien).

    Est-ce qu'un user peut avoir plusieurs sites ?

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. Jointures en SQL
    Par Guizz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/06/2003, 12h21
  3. Réponses: 14
    Dernier message: 17/03/2003, 18h31
  4. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 10h29
  5. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49

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