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 :

Joindre plusieurs tables pour en former qu'une seule.


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Joindre plusieurs tables pour en former qu'une seule.
    Bonjour,

    Je me retrouve face à un probléme. J'effectue une requête sur plusieurs
    tables (ça peut aller jusque 7), la requête reste la même seule la table
    change. Pour effectuer cela j'ai fait des "union distincts" mais le probléme
    est que le résultat est fait pour chaque table indépendamment, ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (select user, count(user) from table1)
    union distinct
    (select user, count(user) from table2)
    union distinct
    (select user, count(user) from table3)
    je pourrais avoir ça comme résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    jean 7 -> table1
    bill   2  -> table2
    eric 8  -> table3
    bill  12 -> table3
    Donc j'ai des doublons, je vois le probléme mais je ne sais pas comment
    le régler. J'ai pensé aux jointures mais avec plus de 2 tables c'est possible ?

    PS: Mysql-4.0.24

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut Re: Joindre plusieurs tables pour en former qu'une seule.
    Citation Envoyé par timeout
    je pourrais avoir ça comme résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    jean 7 -> table1
    bill   2  -> table2
    eric 8  -> table3
    bill  12 -> table3
    J'en doute, soit le nombre d'utilisateurs dans table3 est 8, soit 12 mais pas les deux

    De plus, pourquoi ces redondances d'utilisateurs dans plusieurs tables ? Il y a peut-être un problème de conception à la base...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Re: Joindre plusieurs tables pour en former qu'une seule.
    Citation Envoyé par Maximilian
    Citation Envoyé par timeout
    je pourrais avoir ça comme résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    jean 7 -> table1
    bill   2  -> table2
    eric 8  -> table3
    bill  12 -> table3
    J'en doute, soit le nombre d'utilisateurs dans table3 est 8, soit 12 mais pas les deux
    Bon c'est vrai j'ai pas mis distinct mais c'est pas le probléme et c'est pas l'objectif
    de la requête, cet exemple doit retourner le nombre d'utilisateur différents présent
    dans chaque table.

    Tu peux faire un essais si tu veux, ce que tu n'as pas vu c'est que c'est le résultat
    de deux tables différentes dans une requête avec des unions. Donc, si tu as le
    même utilisateur dans 2 tables différentes tu auras comme résultat celui des tables
    avec le "count" de chaque tables. Donc oui tu as un bill a 12 dans table3 et un bill a
    2 dans table2, c'est ce que je voulais mettre en évidence.

    De plus, j'ai testé avec "union", union all" et "union distinct" et ça ne change strictement
    rien au probléme.

    Citation Envoyé par Maximilian
    De plus, pourquoi ces redondances d'utilisateurs dans plusieurs tables ? Il y a peut-être un problème de conception à la base...
    C'est pas le probléme, je ne peut rien y faire c'est la vie. Mais si tu veux savoir c'est
    parce que c'est des tables de sauvegarde.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    un meilleur exemple (on peut avoir le même username):

    table1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id username
    1 bill
    2 jean
    3 eric
    4 bill
    table2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id username
    5 jean
    6 eric
    7 marcel

    table3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id username
    5 jean
    6 jacques
    requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (select distinct username, count(username) from table1 group by username)
    union
    (select distinct username, count(username) from table2 group by username)
    union
    (select distinct username, count(username) from table3 group by username)
    résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    username count(username)
    bill         2
    jean         1
    eric         1
    bill         1
    jean         1 
    eric         1
    marcel       1
    jean         1
    jacques      1
    On a de jolie redondance, pourquoi un bill a 2 ? Parce-qu'il y est 2 fois dans table1.

    Ce que j'aimerais comme résultat c'est la somme de tous ces "count" pour chaque
    "username" sans redondance.

    Cordialement.

  5. #5
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut

    sa ne doit pas être le plus joli. Mais tu peux toujours envoyer le contenu de tes tables vers une table temporaire pour faire ta requête sur celle ci

  6. #6
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut Re: Joindre plusieurs tables pour en former qu'une seule.
    Il manquait le GROUP BY dans ton premier post, d'où ma remarque.
    Mais sans sous-requêtes ça va être dur (peut-être en utilisant une jointure) ?

    Citation Envoyé par timeout
    C'est pas le probléme, je ne peut rien y faire c'est la vie. Mais si tu veux savoir c'est
    parce que c'est des tables de sauvegarde.
    Ce qui n'empêche rien (si tu as le droit de toucher à la structure des tables)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par cybher
    salut

    sa ne doit pas être le plus joli. Mais tu peux toujours envoyer le contenu de tes tables vers une table temporaire pour faire ta requête sur celle ci
    Ouais pas bête mais en fait c'est pas possible à cause de la base qui risquerait
    de devenir beaucoup trop grosse même si c'est juste du temporaire.

    Par contre, pour la jointure je pense aussi que ce n'est pas possible car j'ai beaucoup
    plus que deux tables mais je vérifie quand même.

    Sinon, je ne peut pas modifier la structure des tables

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Bon eh bien finalement je crois que ce n'est pas possible à faire à l'aide
    d'une jointure sinon, je ne vois pas comment.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 21/04/2011, 11h20
  2. [MySQL] Recupérer plusieurs $POST pour les mettre dans une table
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/06/2010, 21h56
  3. Réponses: 2
    Dernier message: 21/09/2009, 18h26
  4. [mysql - php] plusieurs tables pour un select ORDER BY
    Par sanosuke85 dans le forum Requêtes
    Réponses: 9
    Dernier message: 06/12/2005, 20h25
  5. Réponses: 7
    Dernier message: 10/02/2005, 01h13

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