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

PHP & Base de données Discussion :

requête avec jointure sur la même table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de gwena54
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut requête avec jointure sur la même table
    Salut,
    j'ai un probleme pour afficher les intitulés des rubriques et sous rubriques du cms que je suis en train de réaliser.
    j'ai une table qui contient des infos sur des rubriques:
    id--nom--id_parent

    id, c'est l'id unique et auto increment de la rubrique, nom c'est son nom en toutes lettres et id_parent contient l'id d'une des rubriques si la rubrique et une sous rubrique (c'est assez clair? )

    je souhaiterais afficher sur une page le nom de la rubrique et aussi de la sous rubrique si je suis sur une page qui en est une, j'ai donc réalisé cette requete qui fonctionne bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sql= "SELECT a.id,a.nom_court as nom_court1, b.id,b.nom_court as nom_court2 
    FROM cms_pages a,cms_pages b 
    WHERE b.id='$id' AND b.id_parent=a.id";
    ça m'affiche ça:
    Rubrique 2 > Sous rubrique 2.1
    mais uniquement quand une sous rubrique existe!
    car si il n'en existe pas et bien ça ne m'affiche rien du tout!, normal étant donné que je demande d'afficher le nom de la rubrique parent en fonction de id_parent
    donc si id_parent = 0 et bien ça ne m'affiche rien!
    j'ai également essayé avec ça, mais le résultat est identique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT a.id, a.nom_court as nom_court1, b.id, b.nom_court as nom_court2 
    FROM cms_pages a LEFT JOIN cms_pages b ON b.id_parent=a.id
    WHERE b.id='$id'
    donc ma question (si vous êtes encore là!) comment faire pour afficher le nom de la rubrique quand celle ci ne contient pas de sous rubrique??!!

    Merci d'avance!
    Gwen
    Création de sites, référencement, immobilier et aussi un ptit' blog sur le web et les choses intéressantes du moment

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Avec une jointure externe peut-être (LEFT OUTER JOIN).
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Salut

    Et en inversant les tables du join, est-ce que ça aurait une chance de marcher (je me plante dans l'ordre une fois sur deux, alors peut-être que toi aussi )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.id, a.nom_court as nom_court1, b.id, b.nom_court as nom_court2 
    FROM cms_pages b LEFT JOIN cms_pages a ON b.id_parent=a.id
    WHERE b.id='$id'
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Bah nan c'est le contraire là, il veut les données de la table A même si rien ne correspond dans la table B (jointure à gauche => on prend les données de la table de gauche...)


    Edit : y'a un truc pas clair, tu dis vouloir afficher une rubrique même si elle n'a pas de sous-rubriques, mais dans ta requête tu filtres sur l'id des sous-rubriques, y'a pas un truc qui cloche là
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  5. #5
    Membre du Club Avatar de gwena54
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    et bien si je ne filtre pas sur l'id des sous rubriques, l'info de la sous rubrique ne s'affiche pas!
    en clair j'arrive à avoir soit l'un soit l'autre mais pas les 2
    sinon j'ai inversé les "variables" dans la requete, mais là je n'ai bien sûr plus rien

    attention la table a et b sont exactement les mêmes!
    exemple:
    1 actualités 0
    2 logiciels 0
    3 freeware 2
    4 shareware 2

    vous voyez le genre?
    et une fois qu'on est dans la rubrique 3 (freeware) les rubriques s'affichent de cette manière:
    logiciels > freeware
    ce que j'arrive parfaitement à faire avec les requetes que je vous ai montré auparavant
    mais en clair quand il y a 0, forcément ça ne renvoit rien!
    j'ai essayé de modifier la requete dans tous les sens mais ... no way!
    Création de sites, référencement, immobilier et aussi un ptit' blog sur le web et les choses intéressantes du moment

  6. #6
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Tu as essayé avec la jointure externe comme j'ai suggéré dans ma première réponse
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  7. #7
    Membre du Club Avatar de gwena54
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    euh oui, désolé, toujours le meme résultat: pas de probleme quand la rubrique est une sous rubrique mais probleme quand il n'y a pas de sous rubrique

    edit: c'est vrai qu'outer join a l'air parfait, je suis en train de me renseigner la dessous...

    edit2: he ben voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "SELECT a.id, a.nom_court as nom_court2, b.id, b.nom_court as nom_court1 
    		FROM cms_pages b LEFT OUTER JOIN cms_pages a ON a.id_parent=b.id
    		WHERE b.id='$id'";
    en fait j'ai inversé l'ordre des tables, ce qui fait qu'on est en right join et j'ai changé b.id_parent=b.id pour a.id_parent=b.id

    edit3: j'ai failli oublier de dire merci! merci Amara et les autres aussi

    edit4: bon c'est pas encore tout à fait bon en fait donc je vais arréter de faire des edit et une fois que ça sera bon je reposterai la version finale

    edit5:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql3 = "SELECT a.id, a.nom_court as nom_court1, b.id, b.nom_court as nom_court2 
    		FROM cms_pages b LEFT OUTER JOIN cms_pages a ON b.id_parent=a.id
    		WHERE b.id='$id'";
    ce coup ci c'est la bonne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?=$result["nom_court1"];
    			if(!empty($result["nom_court1"])){ echo ' > ';}
    			echo $result["nom_court2"];?>
    Création de sites, référencement, immobilier et aussi un ptit' blog sur le web et les choses intéressantes du moment

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tant mieux pour toi si ça a fini par marcher. N'oublie par le bouton
    Bonne continuation
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. [MySQL] SELECT * avec jointure sur une même table
    Par Oprichnik dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/03/2011, 14h17
  2. Requete avec jointure sur la même table
    Par CaptainChoc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/04/2009, 13h30
  3. Réponses: 3
    Dernier message: 13/06/2007, 00h31
  4. Requêtes avec liaison sur la même table
    Par jessenco dans le forum Requêtes
    Réponses: 10
    Dernier message: 15/01/2007, 02h10

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