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 :

Requête maître-détail et affichage en PHP


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Requête maître-détail et affichage en PHP
    Bonjour. Je bute actuellement face à une requête MySQL.

    Je dispose de 2 tables : CATEGORIE et SITE.

    En simplifiant on a le MLD suivant :

    - CATEGORIE (num_cat, nom_cat)
    - SITE (num_site, nom_site, #num_cat)

    Je souhaiterai faire apparaitre ceci :

    {nom_cat1}
    ------------------------------
    - {nom_site1}
    - {nom_site2}

    {nom_cat2}
    ------------------------------
    - {nom_site3}
    - {nom_site4}
    Vous voyez le genre ?

    Actuellement j'ai pensé faire la requête suivante avec une jointure entre les 2 tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $sql="select * from categorie,site ";
    $sql.="where categorie.num_cat=site.num_cat";
    $req=mysql_query($sql);
    while($tabres=mysql_fetch_array($req))
    {
    	echo"<h2>".$tabres["nom_cat"]."</h2>";
    	echo"<ul>";
    	echo"<li>".$tabres["nom_site"]."</li>";
    	echo"</ul>";
    }
    Mais il y a un hic. Cela m'affiche en sortie ceci :

    {nom_cat1}
    ------------------------------
    - {nom_site1}

    {nom_cat1}
    ------------------------------
    - {nom_site2}

    {nom_cat2}
    ------------------------------
    - {nom_site3}
    J'ai donc modifier cette requête mais je pense qu'il en existe une beaucoup plus simple que celle-ci mais laquelle :

    Code : 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
     
    $sql="select * from categorie";
    $req=mysql_query($sql);
    while($tabres=mysql_fetch_array($req))
    {
            $num_cat = $tabres["num_cat"];
            $nom_cat = $tabres["nom_cat"];
     
            echo"<h2>".$nom_cat."</h2><ul>";
     
            $sql2="select * from site where num_cat=$num_cat";
            $req2=mysql_query($sql2);
            while($tabres2=mysql_fetch_array($req2))
                    echo"<li>".$tabres2["nom_site"]."</li>";
     
     	echo"</ul>";
    }
    Merci de votre aide.


    [Titre édité par Maximilian]

  2. #2
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 380
    Points
    380
    Par défaut
    Non je crois pas, c'est 2 curseurs qu'il faut utiliser, le premier va tourner
    sur les catégories, le second (imbriqué) va tourner sur les sites pour chaque catégorie.
    2 boucles tu peux pas faire moins. En une requête tu peux pas le faire.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Réponse
    Tu penses donc que la 2ème solution est la bonne et la seule ?

    Une requête avec une jointure n'est-elle pas envisageable ?


  4. #4
    Membre averti Avatar de Soutou
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 328
    Points : 380
    Points
    380
    Par défaut
    ça dépend comment tu veux le présenter. Si tu veux faire une rupture par catégorie c'est la bonne solution.
    Une jointure te donnerait un truc du genre :

    nom_cat1 nom_site1
    nom_cat1 nom_site2
    nom_cat2 nom_site3
    nom_cat2 nom_site4
    ...

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Soutou
    ça dépend comment tu veux le présenter. Si tu veux faire une rupture par catégorie c'est la bonne solution.
    Une jointure te donnerait un truc du genre :

    nom_cat1 nom_site1
    nom_cat1 nom_site2
    nom_cat2 nom_site3
    nom_cat2 nom_site4
    ...
    cf ce sujet: http://www.developpez.net/forums/viewtopic.php?t=424355

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut RIEN COMPRIS
    J'ai beau me pencher sur le topic du lien que tu m'as filé mais je n'y comprends rien, c'est pas assez simplifié et je n'ai pas l'impression que c'est adapté à mon cas.

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: RIEN COMPRIS
    Citation Envoyé par c2pk
    J'ai beau me pencher sur le topic du lien que tu m'as filé mais je n'y comprends rien, c'est pas assez simplifié (...)

    Oui, mais ça je ne peux rien y faire...

    Par ailleurs, on peut pas faire plus simple niveau algo ! (si catégorie change de valeur, alors afficher nouvelle entête).


    Citation Envoyé par c2pk
    et je n'ai pas l'impression que c'est adapté à mon cas.

    Et là tu te trompes lourdement, parce que c'est exactement ce que tu décris !

    ***

    La différence avec quelqu'un qui a un minimum de métier :

    Citation Envoyé par trangsene
    Code super clair et bien expliqué qui me permets de bien comprendre.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ok j'ai compris. Merci.

  9. #9
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Et ben tu vois quand tu veux !


    Je pense que c'est le :
    Citation Envoyé par pcaboche
    (si catégorie change de valeur, alors afficher nouvelle entête).
    qui t'a mis sur la voie...

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    exactement !

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    En gros ca donnerait ceci quoi :

    Code : 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
     
    $sql="select * from categorie,site ";
    $sql.="where categorie.num_cat=site.num_cat";
    $req=mysql_query($sql);
     
    $i = "";
     
    while($tabres=mysql_fetch_array($req))
    {
    	if ($i != $tabres["nom_cat"]) 
    		echo"<h2>".$tabres["nom_cat"]."</h2>";
    	$i = $tabres["nom_cat"];
    echo"<ul>";
    echo"<li>".$tabres["nom_site"]."</li>";
    echo"</ul>";
    }

  12. #12
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    A peu de choses près, oui.

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

Discussions similaires

  1. [MySQL] Problème affichage tableau PHP avec données SQL
    Par akalaan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 14h34
  2. [CSS] Probleme affichage texte php
    Par davyazam dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 06/02/2006, 10h22
  3. Generateur IB et table Maître Détail
    Par 2icd dans le forum InterBase
    Réponses: 19
    Dernier message: 06/01/2006, 21h34
  4. Insertion maître/détail d'interbase 6.
    Par abdelghani_k dans le forum Bases de données
    Réponses: 2
    Dernier message: 06/10/2004, 10h28
  5. [paradox] Post tables maître détail
    Par delphicrous dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/09/2004, 10h28

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