PHP/SQL Comment lier deux tables en une?
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

PHP/SQL Comment lier deux tables en une?



  1. #1
    olivier147

    PHP/SQL Comment lier deux tables en une?


    ------

    Bonjour à tous,

    Je recherche une solution à un problème que je ne parviens pas à résoudre.

    J'ai deux tables SQL avec un dénominateur commun qui se trouve être la commune

    table_1: Commune
    A
    B
    C
    D
    ...

    table_2: Commune Données1 Données2
    D...............xxx........... yyy
    G...............ggg........... kkk
    ... ... ...


    Concernant ma table_1 la liste des communes est fixe, elle contient une vingtaine de communes

    Concernant ma table_2, celle-ci est dynamique, elle évolue selon les requêtes envoyées par les utilisateurs. Par conséquent toutes les communes de la table_1 ne sont pas forcément dans la table_2.

    Je voudrais afficher les résultats comme suit dans un tableau


    Commune(de la table_1) Données1 Données2
    A .............................. ... Null............Null
    B............................. ......Nul.............Null
    C............................. ......Null............Null
    D............................. ......xxx.............yyy
    E............................. .......Null.............Null
    F............................. .......Null.............Null
    G............................. ......ggg.............kkk

    Toutes les communes de la table_1 doivent donc s'afficher et les données de la table_2 doivent s'afficher dans la bonne ligne de la commune lorsqu'il y a correspondance.

    J'ai tenté d'utiliser la fonction INNER JOIN, mais l'ennui c'est qu'il m'affiche uniquement les communes où il y a correspondance. Donc lorsque dans la table_2 une commune n'existe pas dans la table_2 il ne m'affiche pas la ligne des communes sans correspondances avec les données Null.


    Il m'affiche donc celà:

    Commune(de la table_1) Données1 Données2
    D............................. .....xxx...........yyy
    G............................. .....ggg...........kkk


    Voilà le code que j'utilise:

    $sql = "SELECT commune,Données1,Données2 FROM (table_1 INNER JOIN table_2 ON table_1.commune = table_2.commune) ";


    Pourriez vous me donner un coups de pouce?

    Merci d'avance

    -----
    Dernière modification par olivier147 ; 16/06/2017 à 11h04.

  2. #2
    olivier147

    Re : PHP/SQL Comment lier deux tables en une?

    Désolé, erreur de mise en page...


    table_1: Commune
    .................A
    .................B
    .................C
    .................D
    ...

    table_2: Commune Données1 Données2
    ...................D.......... ..xxx.........yyy
    ...................G.......... ..ggg.........kkk
    ... ... ...

  3. #3
    Bluedeep

    Re : PHP/SQL Comment lier deux tables en une?

    Citation Envoyé par olivier147 Voir le message

    J'ai tenté d'utiliser la fonction INNER JOIN, mais l'ennui c'est qu'il m'affiche uniquement les communes où il y a correspondance. Donc lorsque dans la table_2 une commune n'existe pas dans la table_2 il ne m'affiche pas la ligne des communes sans correspondances avec les données Null.
    Je ne comprends pas ta question : si on peut afficher les communes qui n'existent pas dans table_1, table_1 ne sert à rien.

    Essaye de poster de manière plus clair le schéma de tes tables et les données que tu veux afficher préfixées par le nom ou l'alias de table car là c'est pas facile à comprendre.
    Le plus simple est que tu poste le DDL des tables.

  4. #4
    invite5c4e9cf8

    Re : PHP/SQL Comment lier deux tables en une?

    Il ne peut pas y avoir de Null vu que tu utilises un INNER JOIN... c'est justement le but de ce type de join. Si tu veux des Null utilise LEFT JOIN (Null dans la seconde table), RIGHT JOIN (Null dans la première table) ou FULL OUTER JOIN (Null dans les deux tables)

  5. A voir en vidéo sur Futura
  6. #5
    olivier147

    Re : PHP/SQL Comment lier deux tables en une?

    Bonjour,

    Effectivement l'énoncé n'est pas très clair mais ce n'est pas simple à expliquer. Je m'en suis finalement tiré avec right join qui fonctionne très bien. Là je suis devant un autre problème mais je ne l'ai pas sous les yeux. Je vous solliciterai lundi si vous êtes toujours au rendez vous

  7. #6
    olivier147

    Re : PHP/SQL Comment lier deux tables en une?

    Bonjour,

    Voici donc mon second soucis. Je suis parvenu à insérer un filtre sur mon tableau de gauche mais je ne parviens pas à faire de même avec mon tableau de droite.




    table_1: Commune......Region
    .................A............ Normandie
    .................B............ Bretagne
    .................C............ Centre
    .................D............ Normandie
    ...

    table_2: Commune Données1 Données2
    ...................D.......... ..xxx.........yyy
    ...................G.......... ..ggg.........kkk
    ... ... ...


    Voici à quoi ressemble ma requête:

    $sql = "SELECT Données1,Données2 FROM table_2 RIGHT OUTER JOIN table_2 ON table_1.commune = table_2.commune WHERE table_1.Region = 'Normandie' ";

    Ici la région "Normandie" est bien filtré sur la table 1 mais je ne parviens pas, par exemple, à filtrer avec la même requête les données "XXX" de la colonne "Données1" de la table_2.

    Avez vous une idée?

    Merci
    Dernière modification par olivier147 ; 19/06/2017 à 07h28.

  8. #7
    invite5c4e9cf8

    Re : PHP/SQL Comment lier deux tables en une?

    Comme ça je dirais de rajouter à la fin de ta requête " AND table_2.Données1='XXX' " mais je connais pas la syntaxe SQL par coeur regarde la doc SQL.

    A part ça ce n'est pas une bonne pratique à mon avis d'avoir une seule requête SQL complexe. Il vaut mieux avoir plusieurs requêtes et des résultats intermédiaires. Pour deux raisons :
    - cela devient vite compliqué et des résultats intermédiaires permettent de simplifier le problème en sous problèmes
    - selon ton DBMS cela peut poser des problèmes d'optimisation car dans ton exemple il vaut mieux faire la sélection avant le join plutôt que l'inverse. Avec des résultats intermédiaires on peut le faire manuellement. Mais si tu utilises quelque chose de standard comme mysql ou postgres ça jouera quand même car l'AST sera optimisé.

  9. #8
    Bluedeep

    Re : PHP/SQL Comment lier deux tables en une?

    Bonjour,

    Citation Envoyé par olivier147 Voir le message


    Ici la région "Normandie" est bien filtré sur la table 1 mais je ne parviens pas, par exemple, à filtrer avec la même requête les données "XXX" de la colonne "Données1" de la table_2.
    Avez vous une idée?
    Sans doute, mais si tu disais précisément ce que tu veux obtenir, ce serait plus simple.
    Et si tu postais, comme je te l'ai demandé, le DDL de création des tables, on pourrait tester la requête par simple copier-coller.

Discussions similaires

  1. Comment lier deux cellules sur excel
    Par invited87586dc dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 24/01/2013, 18h01
  2. Maths--finance , comment lier les deux dans les études ?
    Par invite027a961f dans le forum Orientation après le BAC
    Réponses: 10
    Dernier message: 23/02/2011, 19h25
  3. lier deux murs entre eux
    Par invitec4aed7e4 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 3
    Dernier message: 18/12/2007, 17h54
  4. lier deux machines via internet
    Par invite48d4167a dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 01/09/2006, 23h12
  5. Lier deux variables
    Par invite234d9cdb dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 13/01/2006, 23h36