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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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

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