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 :

Classer des résultats et les afficher [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut Classer des résultats et les afficher
    Bonjour,

    je galère sur un problème et même en ayant lu quelques posts sur le forum, je ne trouve toujours pas la solution.

    J'ai deux tables :
    - document : id, nom, lien ...
    - type_document : id, nom, id_parent

    Chaque document appartient à un type.
    Un type peut-être le sous type d'un autre type (on aura donc id_parent = id du sur-type, ou le type parent d'un sous type donc (et si aucun sous-type, id_parent = 0).

    J'aimerai afficher la liste de mes documents classés par type et sous-type.

    Un exemple pour illustrer :

    Type europe
    --- doc Schengen
    - Type France
    --- doc Paris
    --- doc Lyon

    Type amérique
    --- doc Canada
    --- doc Mexique
    Sauf que pour le moment avec mon code je n'obtiens que :
    - Type France
    --- doc Paris
    --- doc Lyon

    Type amérique
    --- doc Canada
    --- doc Mexique
    Et pas le premier type avec ses documents associés. On passe directement à son premier sous-type.

    Voici mon code :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    $reqdoc = mysql_query("SELECT DISTINCT T.id_type_document,T.nom_type_document,T.id_parent
    FROM type_document T JOIN document D
    ON T.id_type_document = D.id_type_document
    WHERE D.id_projet = $projet AND T.id_parent = 0
    ORDER BY T.nom_type_document;");
    while ($data = mysql_fetch_array($reqdoc))
    {
    	$type = $data['nom_type_document'];
    	$id = $data['id_type_document'];
    	$parent = $data['id_parent'];
     
    	// On récupère les sous types de ce type
    	$reqsstype = mysql_query("SELECT id_type_document,nom_type_document FROM type_document WHERE id_parent = $id;");
    	$sstype = mysql_fetch_array($reqsstype);
    	// S'il y a un sous type (ou +)
    	if(mysql_num_rows($reqsstype) != 0)
    	{
    		echo '<tr><td><h4>&nbsp;&nbsp;&nbsp;&nbsp;'.$type.$sstype['nom_type_document'].'</h4></td></tr>';
    		$id = $sstype['id_type_document'];
    	}
    	else echo '<tr><td><h4>'.$type.'</h4></td></tr>';
    	$req = mysql_query("SELECT nom_document,id_document,etat_document,lien_document
    FROM document WHERE id_type_document = $id;");
    	while ($donnees = mysql_fetch_array($req))
    	{
    		$nomdoc = $donnees['nom_document'];
    		echo '<tr><td>><span class="blanc"> '.$nomdoc.'</span> ('.$donnees['etat_document'].')</td>';
    		echo '<td>&nbsp;&nbsp;<a href="download.php?dossier='.$dossier.'&filename='.$donnees['lien_document'].'">Télécharger</a></td></tr>';
    	}
    }
    J'ai essayé plein de méthodes en vain : faire des while "il y a un sous type" mais du coup ça ne m'affichait que les documents du dernier sous-type s'il en existait, et rien d'autre. A noter également qu'il peut y avoir plusieurs étages de types :
    - type / sous type / sous sous type / sous sous sous type etc ...

    J'ai essayé de voir en récupérant l'ancien nom de type et en comparant avec le nouveau mais rien non plus.

    Enfin bon, un peu d'aide ferait plaisir parce que là ...

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Salut,

    J'ai regardé un peu ton code mais j'ai pas vu pourquoi tu n'as pas le premier affichage
    En plus tu as le sous-type !!!

    Parcontre, ton code ne peux pas afficher plusieurs étages de type et à mon avis le mieux est de faire du récurssif (vu qu'en plus c juste un parcours en profondeur)

    Pour le premier affichage, je simplifierais en gardant juste le premier While pour tester le premier niveau

    En espérant que tu trouves

  3. #3
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    En fait je n'ai pas le premier affichage parce que je redéfinis mon 'id' si j'ai un sous type et j'affiche les documents ayant pour type de document l'id sélectionné.

    Le problème du récursif c'est que je ne vois pas bien comment faire hormis quelque chose comme :

    - Affichage du type
    > affichage de ses docs
    - affichage de l'éventuel sous type
    > affichage des docs
    - affichage d'un sous sous type
    > affichage de ses docs

    et comme l'affichage des docs est toujours la même requête simplement en changeant l'id, je trouve ça moche de devoir réécrire à chaque fois la requpete.

    Mais hormis cette solution, je ne vois pas comment faire du récursif

    EDIT : et j'ai fait plein de tests en gardant que le premier niveau, j'affiche bien tous mes types avec leurs documents, mais mes types ne sont pas classés comme il faut par type/sous type après =/

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Non pas comme celà ....

    Un parcours récurssif en profondeur, puis une remontée avec l'affichage ...

    En gros:
    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
     
    function recursiveType ($idtype) {
     
       // On récupère les sous types de ce type
       $reqsstype = mysql_query("SELECT id_type.... FROM type_document   WHERE id_parent = $id;");
       $sstype = mysql_fetch_array($reqsstype);
     
       while (  ) { //boucle pour parcourir les types
    	if (ce type contient un sous type) recursiveType ($idSousType);
    	else { 
                       traitement à l'affichage
    	      echo ...
    	}
        }
    }

  5. #5
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    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
    18
    19
    <?php
    function recursiveType ($idtype) 
    {
       // On récupère les sous types de ce type
       $reqsstype = mysql_query("SELECT id_type_document,id_parent FROM type_document WHERE id_parent = $idtype;");
     
    	while ($sstype = mysql_fetch_array($reqsstype)) 
    	{
    		$parent = $sstype['id_parent'];
    		$idSsType = $sstype['id_type_document'];
    		if ($parent != 0) 
    			recursiveType ($idSsType);
    		else 
    		{ 
    			echo 'Type : '.$nomtype.'<br />';
    		}
    	}
    }
    ?>
    Et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $reqdoc = mysql_query("SELECT DISTINCT T.id_type_document,T.nom_type_document,T.id_parent
    FROM type_document T JOIN document D
    ON T.id_type_document = D.id_type_document
    WHERE D.id_projet = $projet 
    ORDER BY T.nom_type_document ASC;");
    while ($data = mysql_fetch_array($reqdoc))
    {
    	$nomtype = $data['nom_type_document'];
    	$idtype = $data['id_type_document'];						
     
    	recursiveType($idtype);					
    }
    Ceci ne m'affiche plus rien du tout. Aurai-je fait une erreur, un mauvais appel, un mauvais placement ? C'est vraiment pas mon truc ces histoires de récursivité

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Oui je vois ça

    en fait il faut que tu déroules ta procédure à la main pour le retour de l'affichage (c ça le plus dur).

    rapidement, je remarque que tu as pas de echo après l'appel DONC à la remonté, rien ne s'écrira !!!
    Mets un echo dans le if

  7. #7
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Chuuuuut on se moque pas

    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
    18
    19
    20
    21
    22
     
    function recursiveType ($idtype) 
    {
    	// On récupère les sous types de ce type
    	$reqsstype = mysql_query("SELECT id_type_document,nom_type_document,id_parent FROM type_document WHERE id_parent = $idtype;");
     
    	while ($sstype = mysql_fetch_array($reqsstype)) 
    	{
    		$parent = $sstype['id_parent'];
    		$idSsType = $sstype['id_type_document'];
    		$nomtype = $sstype['nom_type_document'];
    		if ($parent != 0) 
    		{
    			recursiveType ($idSsType);
    			echo 'sstype : '.$nomtype.'<br />';
    		}
    		else 
    	        { 
    			echo 'Type : '.$nomtype.'<br />';
    		}
    	}
    }
    Bon maintenant, il m'affiche uniquement mon sous-type.
    C'est dans cette fonction aussi que je dois mettre où afficher mon type (le père de mon sous type) ou c'est dans mon traitement ?

    Merci Fench de m'aider

    EDIT

    J'ai rajouté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while ($data = mysql_fetch_array($reqdoc))
    {
    	$nomtype = $data['nom_type_document'];
    	$idtype = $data['id_type_document'];						
            echo 'nomtype : '.$nomtype.'<br />';
    	recursiveType($idtype);					
    }
    Et j'obtiens :
    nomtype : 1. Test2
    sstype : 1.1 Test
    nomtype : 1.1 Test (donc cette ligne en trop du coup)
    nomtype : 2. Test3
    EDIT 2

    It ruuuuuuuuuuuuuuuuuuns !!!
    Maintenant faut que j'affiche mes documents associés !
    Mais euh ça se fait après la fonction ou dans la fonction du coup ? (j'ai testé les deux solutions, après l'appel à la fonction, j'affiche les bons docs mais la liste s'écrit après les types, et non pas pour chaque type)

  8. #8
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Bon, j'arrête les edit, ça va devenir illisible !

    Ca fonctionne donc à un détail près.

    J'obtiens :
    1. type1
    1.1 sstype1
    > doc1
    > doc2
    2. type2
    > doc3
    > doc4
    > doc5
    Sauf que doc1 et doc2 appartiennent à type1 et non à sstype1 !
    Et le document appartenant à sstype1 est zappé de la liste x)

    Mon code :

    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
    18
    19
    20
    21
    22
    23
    24
     
    $reqdoc = mysql_query("SELECT DISTINCT T.id_type_document,T.nom_type_document,T.id_parent
    FROM type_document T JOIN document D
    ON T.id_type_document = D.id_type_document
    WHERE D.id_projet = $projet AND T.id_parent = 0
    ORDER BY T.nom_type_document ASC;");
    while ($data = mysql_fetch_array($reqdoc))
    {
    	$nomtype = $data['nom_type_document'];
    	$idtype = $data['id_type_document'];						
    	echo '<tr><td><h4>'.$nomtype.'</h4></td></tr>';
    	recursiveType($idtype);	
     
    	$reqdoc2 = mysql_query("SELECT D.nom_document,D.id_document,D.etat_document,D.lien_document
    	FROM document D WHERE D.id_type_document = $idtype;");
    	while ($datas = mysql_fetch_array($reqdoc2))
    	{
    		$nomdoc = $datas['nom_document'];
    		$etatdoc = $datas['etat_document'];
    		$liendoc = $datas['lien_document'];
    		echo '<tr><td>><span class="blanc"> '.$nomdoc.'</span> ('.$etatdoc.')</td>';
    	}
     
    }
    EDIT
    En faisant appel à ma fonction après ma recherche de documents, ça me zappe "juste" le document de 'sstype1' et plus ceux de type1.

    EDIT 2 (ça devient une mauvaise manie je trouve)
    J'ai mis ma requête avant l'appel à ma fonction ET aussi dans ma fonction.
    Et ça fonctionne.
    Mais c'est moche non ?

  9. #9
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Avec tous tes edits je suis

    Donnes ton code actuel stp

  10. #10
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Oui je suis désolée x)

    Je récapitule !

    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
    18
    19
    20
    21
    22
    23
    24
     
    $reqdoc = mysql_query("SELECT DISTINCT T.id_type_document,T.nom_type_document,T.id_parent
    FROM type_document T JOIN document D
    ON T.id_type_document = D.id_type_document
    WHERE D.id_projet = $projet AND T.id_parent = 0
    ORDER BY T.nom_type_document ASC;");
    while ($data = mysql_fetch_array($reqdoc))
    {
    	$nomtype = $data['nom_type_document'];
    	$idtype = $data['id_type_document'];						
    	echo '<tr><td><h4>'.$nomtype.'</h4></td></tr>';
     
    	$reqdoc2 = mysql_query("SELECT nom_document,id_document,etat_document,lien_document
    FROM document WHERE id_type_document = $idtype;");
    	while ($datas = mysql_fetch_array($reqdoc2))
    	{
    		$nomdoc = $datas['nom_document'];
    		$etatdoc = $datas['etat_document'];
    		$liendoc = $datas['lien_document'];
    		echo '<tr><td>><span class="blanc"> '.$nomdoc.'</span> ('.$etatdoc.')</td>';
    		echo '<td>&nbsp;&nbsp;<a href="download.php?dossier='.$dossier.'&filename='.$liendoc.'">Télécharger</a></td></tr>';
    	}
    	recursiveType($idtype);			
    }
    et ma fonction qui est écrite en haut de page (d'ailleurs est-ce bien ?)
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    function recursiveType ($idtype) 
    {
       // On récupère les sous types de ce type
       $reqsstype = mysql_query("SELECT id_type_document,nom_type_document,id_parent FROM type_document WHERE id_parent = $idtype;");
     
    	while ($sstype = mysql_fetch_array($reqsstype)) 
    	{
    		$parent = $sstype['id_parent'];
    		$idSsType = $sstype['id_type_document'];
    		$nomtype = $sstype['nom_type_document'];
    		if ($parent != 0) 
    		{
    			recursiveType ($idSsType);
    			echo '<tr><td><h4>&nbsp;&nbsp;'.$nomtype.'</h4></td></tr>';
    			$reqdoc2 = mysql_query("SELECT nom_document,id_document,etat_document,lien_document
    								FROM document WHERE id_type_document = $idSsType;");
    			while ($datas = mysql_fetch_array($reqdoc2))
    			{
    				$nomdoc = $datas['nom_document'];
    				$etatdoc = $datas['etat_document'];
    				$liendoc = $datas['lien_document'];
    				echo '<tr><td>&nbsp;&nbsp;><span class="blanc"> '.$nomdoc.'</span> ('.$etatdoc.')</td>';
    				echo '<td>&nbsp;&nbsp;<a href="download.php?dossier='.$dossier.'&filename='.$liendoc.'">Télécharger</a></td></tr>';
    			}
    		}
    		else 
    		{ 
    			echo '<tr><td><h4>'.$nomtype.'</h4></td></tr>';
    		}
    	}
    }
    Actuellement, ce code me donne comme résultat :
    1. type1
    > doc1 Télécharger
    > doc2 Télécharger
    1.1 sstype1
    > doc3 Télécharger
    2. type2
    > doc4 Télécharger
    > doc5 Télécharger
    Problème (j'en ai toujours u_u) :
    pour le code appelé sous ma requête de document, tout va bien ! Le lien télécharger mène au bon document, le chemin d'accès étant défini juste au dessus.
    Pour le code appelé dans la fonction en haut de page : mon chemin d'accès n'est pas défini avant donc ça plante ! Mais je ne vais pas réécrire non plus comment avoir le chemin d'accès, dans ma fonction ?!

    Enfin bon, je trouve que ça fait trop redondance tout ça et je ne vois pas comment écrire qu'une seule fois les choses.

  11. #11
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Attention baggie

    La récursivité, c puissant mais c aussi super pour mettre un code en l'air (je surveille mes expressions car les modos veillent ... )

    Dans ton programme récurssif, je ne veux pas voir un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $reqdoc2 = mysql_query("SELECT nom_document,id_document,etat_document,lien_document
    FROM document WHERE id_type_document = $idSsType;");
     
    while ($datas = mysql_fetch_array($reqdoc2)){
        ....
        .... et hop je repart dans de l'ittératif ;)
    Tu pars vite dans des excés de code

    Déroule bien l'algo sur papier (arguments, etc, ... ) et tu verras vite la solution

    Je dois aller en réunion, je te laisse
    et j'espère que tu trouveras

  12. #12
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Faut pas m'en vouloir, mes cours d'algo m'ont un peu *@/*%£ le cerveau, et la partie récursif j'ai pas vraiment tout bien compris x)

    Bon je vais essayer d'arranger tout ça ...

    Merci pour l'aide !

  13. #13
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Bon bah décidément je vois pas ...

    J'ai décomposé ce que je veux :

    1. Sélectionner tous les types n'étant pas un sous type (id_parent = 0)
    2. Afficher les documents du premier type
    3. Chercher ses sous types
    4. Afficher les documents de chaque sous type
    5. Aller au prochain type

    Et je ne vois pas comment ne pas faire de redondance entre 2. et 4. vu que c'est la même requête avec juste l'id du type qui change =/
    A la différence près que 2. se fera dans mon PHP 'normal', alors que 4. se fait dans la fonction récursive puisqu'il n'y a qu'ici que j'obtiens les sous types. Or, apparemment, ce n'est pas bon comme je fais ...

    Je suis perduuuue

  14. #14
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Bon je dois finir un bout de code pour un collégue et je vais regarder ce matin en copie/coller de ton code sur un éditeur avec tes étapes.


  15. #15
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bon j'ai aéré un peu ton code pour repartir sur des trucs plus simples ...

    Pour la fonction
    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
     
    function recursiveType ($idtype) 
    {
       // On récupère les sous types de ce type
      // On vire le if car le dernier sera qd le select trouvera rien .....
       $reqsstype = mysql_query("SELECT id_type_document,nom_type_document,id_parent FROM type_document WHERE id_parent = $idtype;");
     
    	while ($sstype = mysql_fetch_array($reqsstype)) 
    	{
                             // ICI affichage des infos sur le type car vaux mieux faire
                             // celà à la descente sinon si à la remonté, tes chemins 
                             // vont être à l'envers
    		$idSsType = $sstype['id_type_document'];
    	             recursiveType ($idSsType);
    	}
                 // ICI affichage du dernier, celui qui a pas de fils donc
    }
    Pour l'application
    Je veux bien que tu fasses sur le premier niveau un while mais cela peut se simplifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $reqdoc = // ta méga requête
    while ($data = mysql_fetch_array($reqdoc))
    {
    	$nomtype = $data['nom_type_document'];
    	$idtype = $data['id_type_document'];		
                 echo '<tr><td><h4>'.$nomtype.'</h4></td></tr>';
    	recursiveType($idtype);
     }
    volilà reste l'affichage mais ya pas besoin de plus de code niveau des reqûetes

  16. #16
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Quand tu dis 'affichage des infos sur le type', est-ce que tu parles uniquement du nom de mon type ou également des documents qui lui sont liés ?

    Parce que je suis en train de tester et ça n'affiche toujours pas ce que je veux =/

  17. #17
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Tu travailles sur le parcours des types ...

    Pour un type, tu as des documents (si j'ai bien compris)

    DONC c comme tu veux en descendant pour avoir genre:
    type 1
    doc 1
    doc 2
    sous type 1.1
    cad tout avant l'appel récurssif

    et en remontant
    type 1
    sous type 1.1
    doc 1
    doc 2
    cad affichage type avant l'appel, affichage des documents en remontant



    As tu compris edit: comprise

  18. #18
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Justement, j'avais donc fait avant l'appel :

    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
    18
    19
    20
    21
     
    $reqdoc = mysql_query("SELECT ...");
    while ($data = mysql_fetch_array($reqdoc))
    {
    	$nomtype = $data['nom_type_document'];
    	$idtype = $data['id_type_document'];		
    	echo '<tr><td><h4>'.$nomtype.'</h4></td></tr>';
     
    	$reqdoc2 = mysql_query("SELECT nom_document,id_document,etat_document,lien_document
    	FROM document WHERE id_type_document = $idtype;");
    	while ($datas = mysql_fetch_array($reqdoc2))
    	{
    		$nomdoc = $datas['nom_document'];
    		$etatdoc = $datas['etat_document'];
    		$liendoc = $datas['lien_document'];
    		echo '<tr><td>><span class="blanc"> '.$nomdoc.'</span> ('.$etatdoc.')</td>';
    		echo '<td>&nbsp;&nbsp;<a href="download.php?dossier='.$dossier.'&filename='.$liendoc.'">Télécharger</a></td></tr>';
    	}
     
    	recursiveType($idtype);
    }
    Et j'obtiens :
    1. Type1
    > doc1 Télécharger
    > doc2 Télécharger

    1.1 Sstype1

    2. Type2
    > doc3 Télécharger
    > doc4 Télécharger
    Mais, je n'affiche PAS les documents du sous-type ! Et comme le sous type on le cherche dans la fonction, je pensais donc que l'on devait chercher les documents dans la fonction. Mais ça ne fonctionnerait pas puisque ça afficherait les docs du sous type, mais plus ceux des types.

    Conclusion, est-ce que je dois l'écrire deux fois ma requête de cherchage de documents ?

    Ou suis-je encore désespérée(ante) et je n'ai rien compris ?

  19. #19
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Touches plus au code que tu viens de mon donner (j'aime bien) et donnes moi celui de la fonction maintenant (Pour voir pourquoi, il 's'arrête au premier sous-type).

    Au fait au final tu devrais bien avoir ?
    1. type1
    > doc1
    > doc2
    1.1 sstype1
    > doc6
    2. type2
    > doc3
    > doc4
    > doc5

    Courage à maxi 16h30 c fini

  20. #20
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Voici ma fonction :
    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
    18
     
    function recursiveType ($idtype) 
    {
       // On récupère les sous types de ce type
       // On vire le if car le dernier sera qd le select trouvera rien .....
       $reqsstype = mysql_query("SELECT id_type_document,nom_type_document,id_parent FROM type_document WHERE id_parent = $idtype;");
     
    	while ($sstype = mysql_fetch_array($reqsstype)) 
    	{	
                    $nomtype = $sstype['nom_type_document'];
                    // Les infos de mon type = son nom
    		echo '<tr><td><h4>'.$nomtype.'</h4></td></tr>';
                    $idSsType = $sstype['id_type_document'];
    	        recursiveType ($idSsType);
            }
     //   echo '<tr><td><h4>'.$idtype.'</h4></td></tr>';
    // Mise en commentaire de cette ligne parce que ça duplique mes noms de type
    }
    Et j'essaie d'obtenir l'exemple que tu as donné en effet !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2013] VBA - Afficher des résultats selon les variables demandés par l'utilisateur
    Par JOKER6 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/05/2015, 00h22
  2. Classer des résultats par date/heure
    Par PedroBD dans le forum Langage SQL
    Réponses: 12
    Dernier message: 27/11/2006, 15h48
  3. vb6 + charger des infos ds des pages sans les afficher
    Par mqsi dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/11/2006, 09h06
  4. [MySQL] Classer des résultats par ordre alphabétique
    Par Him dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/07/2006, 14h59
  5. [Order by] classer des résultats sur des nombres
    Par vampiloup dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/01/2006, 14h58

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