[Php] Affichage d'une liste type mére-fille

Résolu/Fermé
Signaler
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
-
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
-
Bonjour,

Je suis bloquée sur un problème d'affichage de données.
Mes données sont en bases MySql.
J'ai une liste d'élèment classé en "repertoire / Sous-repertoire"
ma table est comme suit
CREATE TABLE `folder` (
  `id` int(255) NOT NULL auto_increment,
  `folder` varchar(255) NOT NULL default '',
  `level` int(255) NOT NULL default '0',
  `app` int(255) NOT NULL default '0',
  UNIQUE KEY `id` (`id`)
) 

Folder est le libelle de l'élèment
Level est le niveau ou se trouve le "repertoire" 0 = racine, 1 = 1er sous dossier ....
App est l'Id référant au pére ... C'est a dire que si level est !=0 alors App doit être égale à l'Id de sa mére ou de son pére comme vous voulez ...

Je veux afficher ma liste tout en respectant les liens mére-fille hors je n'y arrive pas ...

Aider moi ...svp

17 réponses

Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
Dur dur :P

une solution complètement pas optimisée serait de faire comme ceci

sélectionner tous les éléments dont l'App est à 0

pour chacun de ces éléments

prendre l'id de l'élément

puis, sélectionner tous les élément dont l'app est égale à l'id

et on recommence ....


Tu vas faire des requêtes en pagaille ! :P

Mais c'est la façon la plus simple à expliquer et à faire si tu débutes.
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
J'ai essaier ... mais il faut le faire en "dynamique" car je doit pourvoir insérer x niveaux ... et comme tu dis ca va être lourd ....

Sans quoi on peut faire comment ... même en plus complexe :D
Peut être que je peux m'y risquer
0
Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
Qu'entends-tu par "dynamique" ? et insérer x niveaux ?

En fait, il faut faire une fonction récursive, comme ça tu ne seras pas limité par le nombre de niveaux.
De toute façon, il faut du récursif ...
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
c'était récursif que je voulais dire par "dynamique" :(

Genre je fais
$x=0;
SELECT level FROM folder
(là faudrait trouver le niveau maximun)

WHILE ($niveauMax != $x)
SELECT * FROM folder WHERE level=$x;
=>récupération de l'id
SELECT * FROM folder WHERE app=$idPere
=>traitement
$x++;

Comment fait on pour trouver la valeur max d'un champ ... pour niveauMax ??

0
Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
Je ne vois pas ce dont tu veux faire avec les niveaux parce que tu auras des redondances dans ton tableau dans ce cas.

peux-tu me faire un exemple avec des données ?
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
En fait je prennais les niveaux pour prendre m'ancré ...

exemple de données
NOM | ID | NIVEAU | Appertenance
__________________________
P@ | 1 | 3 | 3
Phil | 2 | 3 | 3
Dadou| 3 | 2 | 4
Jack | 4 | 1 | 0
Lili | 5 |1 | 0

Mon Objectif étant de pouvoir sortir les élèments comme suit
Jack
-Dadou
--P@
--Phil
Lili
0
Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
Ok

En fait ce dont tu disais dans ton précédent post aurais donné un résultat comme ça :
Jack
-Dadou
--P@
--Phil
Lili
Dadou
-P@
-Phil
P@
Phil

ce n'est pas ce que tu veux donc.


Un algo comme celui-ci devrait marcher
function retourner_element($app)
{
    sélectionner tous les éléments d'app = $app classé par level
    pour chaque élément
       afficher le nom
       prendre son $id
       retourner_element($id)
    fin de chaque élément
}

Une fonction est récursive quand elle s'appelle elle-même comme ici.
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
j'ai fait
function retourner_element($app)
{
	$QUERY = faire_requete("SELECT * FROM folder WHERE app=$app");
	$RESULT = mysql_num_rows($QUERY);
	$a=0;
	WHILE($RESULT!=$a)
	{
		$folder = mysql_result($QUERY,$a,"folder");
		$folderID = mysql_result($QUERY,$a,"id");
		$folderApp = mysql_result($QUERY,$a,"app");
		$folderLevel = mysql_result($QUERY,$a,"level");

		echo "<TR>";
		echo "<TD>$folder - id=>$folderID - App=>$folderApp - Level=>$folderLevel</TD>";
		echo "</TR>";
		return $folderID;
	}
}


retourner_element('0');

Mais ca ne me retourne rien ... pas d'ereur ... rien ...
Je ne sais pas pourquoi ..

A quoi ca sert de retourner l'ID puisqu'on ne s'en sert pas plus haut ?
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
OUPS ... y avait pas de données correspondait ...
0
Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
Essaie comme ça plutôt.

function retourner_element($app,$appendice="")
{
    $query = "SELECT * FROM folder WHERE app='$app' ORDER BY level";
    $result = mysql_query($query);
    while ($row = mysql_fetch_array($result)) {
        $id = $row["id"];
        echo $appendice.$row["nom"]."<br/>";
        retourner_element($id,$appendice."-");
    }
    return true;
}

retourner_element('0');
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
j'ai
 	
Notice: Undefined index: id in d:\bd1\comboService.inc on line 38

Notice: Undefined index: nom in d:\bd1\comboService.inc on line 39



Mais je ne sais pas par quoi remplacer
0
Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
Ce sont les champs "nom" et "id" de ta table folder.
écris-les de façon correcte.
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
Mais c'est bien écris ... j'ai remplacer pour que ca corresponde ;...

C'est pour ca que je ne comprend ... il ne faut pas les choper par indice ??
0
Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
Tu peux essayer de choper par index. Mais par nom de l'indice devrait marcher si ça a été bien écris.
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
Je l'ai fait avec les indice et ca marche ... merci :D
Tu crois que je peux remplacer les - par des <TR>,<TD> et incrémenté un colspan ??
0
Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
Ce sera difficile d'incrémenter un colspan mais tu peux essayer ...

Je te rappelle que c'est une solution pas super élégante que tu as là vu le nombre de requêtes nécessaire.

Tu peux t'amuser à imaginer une solution plus rapide si tu en as le coeur.
0
Messages postés
1709
Date d'inscription
vendredi 7 juillet 2000
Statut
Membre
Dernière intervention
24 mars 2009
186
Je suppose que ca veux dire passer par des tableaux pour stocker les données et les traiter par la suite ??

Mais comment ca marche sur ce phorum ??
0