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 PHP Discussion :

Table jointure self [POO]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 33
    Points : 16
    Points
    16
    Par défaut Table jointure self
    Ne riez pas je débute
    je souhaite recuperer le libellé de Menu qui correspont à
    Id_parent
    autrement dit : affichage de
    couture 2 tapisserie 2 peinture 3 tricot 3

    table Pages
    Menu        Id_Menu   Id_parent
    couture		1	2
    peinture	2	3
    tapisserie	3	2	
    tricot		4	3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $reponse = $bdd->query('SELECT * FROM pages WHERE INNER JOIN Menu ON Id_parent');
    $data = $reponse->fetch();
    while ($donnees = $reponse->fetch())
     
    // debut de la boucle
    {	
    $lala=$donnees['Id_parent'];
    $lulu=$donnees['Menu'];	
    ?>
    <a href="index2.php?variable=<?php echo $lala?>"><?php echo $lulu;?></a></li>
    <?php}// fin de la boucle 
    $reponse->closeCursor();
    ?>

  2. #2
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Bonjour,
    Deux problèmes :
    - La requete SQL n'est pas correcte. Il faut préciser le champ utilisé pour la jointure
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM pages p INNER JOIN Menu m ON m.Id_parent = p.taColonne WHERE ....

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data = $reponse->fetch();
    while ($donnees = $reponse->fetch())
    Ici, $data contiendra le premier row de données et n'est jamais affiché (tu peux supprimer cette ligne).

  3. #3
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Merci Insaneness pour ta réponse et ta rapidité.
    Je n'ai pas bien compris p.taColonne.
    je vai retourner vers les tutu pour essayer d'aller plus loin.
    ça fait 15 ans que je n'ai plus fait d'informatique et à 75 ans c'est dur.

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query('SELECT * FROM pages  INNER JOIN Menu m ON m.Id_parent = p.Menu');
    je voudrai obtenir couture 2 tapisserie 2 peinture 3 tricot 3

    ça ne marche pas

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il n'y a aucune jointure à faire ici : c'est une requête simple.

    Code php : 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
    <?php
    $requete = "SELECT Id_Menu, Id_parent 
       FROM pages 
       ORDER BY Id_parent ASC, Id_Menu ASC"; // on trie par Id_parent ascendant, puis par Id_Menu ascendant
    $reponse = $bdd->query( $requete );
    ?>
    <ul>
    <?php
    while ( $data = $reponse->fetch() )
    {
    ?>
       <li><a href="index2.php?variable=<?php echo htmlspecialchars($data['Id_parent']); ?>"><?php echo htmlspecialchars($data['Menu']); ?></a></li>
    <?php
    }// fin de la boucle 
    $reponse->closeCursor();
    ?>
    </ul>

    Selon ta table, on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <ul>
       <li><a href="index2.php?variable=2">couture</a></li>
       <li><a href="index2.php?variable=2">tapisserie</a></li>
       <li><a href="index2.php?variable=3">couture</a></li>
       <li><a href="index2.php?variable=3">tricot</a></li>
    <ul/>
    Cela dit, ça me parait mal conçu... :
    • couture et tapisserie mènent (sans distinction) vers la même page : index2.php?variable=2
    • peinture et tricot mènent (sans distinction) vers la même page : index2.php?variable=3

  5. #5
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Merci pour me remettre sur la voie.
    j'ai un message d'erreur
    le Id_parent me renvoi bien une valeur
    mais le Id_menu me renvoi Undefined index: Id_menu ligne 42
    alors que je souhaite avoir l'intitulé du menu : couture etc..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //-------------------------------------------------------------------
    $requete = "SELECT Id_Menu, Id_parent 
       FROM pages 
       ORDER BY Id_parent ASC, Id_Menu ASC"; // on trie par Id_parent ascendant, puis par Id_Menu ascendant
    $reponse = $bdd->query( $requete );
     
    //---------------------------------------------------------------------
    while ( $data = $reponse->fetch() )
    {	
     echo htmlspecialchars($data['Id_parent']);	
     echo htmlspecialchars($data['Id_menu']);
    }  // fin de la boucle 
    $reponse->closeCursor();
    ?>
    le but est d'alimenter le menu
    Nom : asso.JPG
Affichages : 70
Taille : 34,5 Ko

  6. #6
    Invité
    Invité(e)
    Par défaut
    1- MERCI d'utiliser le bouton "+ Répondre à la discussion", en bas à gauche.

    2- Attention : Id_Menu est différent de Id_menu.

    CONSEIL : ÉVITE des mettre des majuscules dans les noms de colonnes et de tables SQL : id_menu, id_parent.

    Pour les varaibles PHP, il existe plusieurs conventions (dont) :

    A toi de choisir celle qui te convient le mieux.

  7. #7
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    ok merci

    j'ai rectifié
    et adopté (il est temps que j'utilise les bons codes)
    $id_menu, $id_parent

    j'ai toujours l'erreur

  8. #8
    Invité
    Invité(e)
    Par défaut
    Vérifie comment les noms de colonnes sont orthographiés dans la table en base de données...

  9. #9
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    j'ai bien vérifié dans ma table id_menu et id_parent
    il manquait Menu dans le select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete = "SELECT id_menu, id_parent, Menu
       FROM pages 
       ORDER BY id_parent ASC, id_menu ASC";
    et le resultat etait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo htmlspecialchars($data['id_parent']);	
    echo htmlspecialchars($data['Menu']);

    et non echo htmlspecialchars($data['id_menu']);Merci encore pour m'avoir indiqué le chemin

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oups ! (Tu as édité ton message...)

  11. #11
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    J'essai encore d'abuser de votre patience !!
    le code fourni ci-dessus fonctionne super bien et lorsque je clique sur un element du menu, la page s'affiche.

    Je souhaite intégrer entre chaque rubrique l'image ci jointe :
    Image ART pour Couture,Peinture, Tapisserie, Tricot (id_parent=2)
    puis Image Sport pour Marche,Yoga,....(id_parent=2)
    Images attachées Images attachées  

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- On peut mettre toutes les URL des images dans un array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $images = [
       2=>'url-image-art.png',
       3=>'url-image-sport.png',
    ...
    ];
    2-OU MIEUX : dans la table "parent" (SI elle existe !?! -> sinon, on peut la créer !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_parent  url_image                  nom_parent
    2          'url-image-art.png'      'Art'
    3          'url-image-sport.png'   'Sport & Santé'
    ...
    3- PAR CONTRE, il faudrait que tu expliques MIEUX d'où viennent ces id_parent !
    Ce n'est pas très clair.
    Et j'ai surtout l'impression que ça reste encore du "bricolage".

    MONTRE TES TABLES SQL... et je te dirai comment l’améliorer.

  13. #13
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Oui tu as raison j'en convient, ça fait un peu bricolage.

    Je n'ai qu'une seule table, mais peut être que je devrai en faire 2

    Les id_parent on pour valeur 2, 3 4 pour sélectionner les menus à afficher
    2 pour Couture, Peinture dans la Rubrique ARTS
    3 Pour Yoga etc...dans la rubrique Sports & Sante
    4 etc..
    Comme dans l'image attachée envoyée précédemment
    Voici ma table :

    id_page
    Activite
    Libel_activ
    Respons
    Tel_respons
    Lieu_activ
    Calendrier
    Tarif
    Mode_paiement
    Menu
    id_menu
    id_parent

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

Discussions similaires

  1. Passage MCD vers MLD. Créer la table jointure.
    Par Oishiiii dans le forum PowerAMC
    Réponses: 6
    Dernier message: 24/03/2010, 21h49
  2. Plusieurs conditions sur une meme table (jointure)
    Par bugbug dans le forum Requêtes
    Réponses: 18
    Dernier message: 22/09/2009, 14h34
  3. [forms] Data Block Lov Plusieurs tables jointure
    Par loupin dans le forum Forms
    Réponses: 5
    Dernier message: 13/09/2006, 21h39
  4. Réponses: 14
    Dernier message: 05/09/2006, 17h01
  5. Create table + jointure
    Par ender999 dans le forum Débuter
    Réponses: 7
    Dernier message: 20/02/2004, 12h04

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