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

Résolu/Fermé
Utilisateur anonyme - 20 déc. 2005 à 10:05
 Utilisateur anonyme - 20 déc. 2005 à 16:21
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
A voir également:

17 réponses

wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
20 déc. 2005 à 10:26
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
Utilisateur anonyme
20 déc. 2005 à 10:37
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
wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
20 déc. 2005 à 10:49
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
Utilisateur anonyme
20 déc. 2005 à 10:58
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
20 déc. 2005 à 11:06
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
Utilisateur anonyme
20 déc. 2005 à 11:11
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
wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
20 déc. 2005 à 11:34
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
Utilisateur anonyme
20 déc. 2005 à 12:56
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
Utilisateur anonyme
20 déc. 2005 à 13:01
OUPS ... y avait pas de données correspondait ...
0
wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
20 déc. 2005 à 14:12
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
Utilisateur anonyme
20 déc. 2005 à 14:24
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
wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
20 déc. 2005 à 15:17
Ce sont les champs "nom" et "id" de ta table folder.
écris-les de façon correcte.
0
Utilisateur anonyme
20 déc. 2005 à 15:36
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
wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
20 déc. 2005 à 15:53
Tu peux essayer de choper par index. Mais par nom de l'indice devrait marcher si ça a été bien écris.
0
Utilisateur anonyme
20 déc. 2005 à 16:10
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
wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
20 déc. 2005 à 16:17
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
Utilisateur anonyme
20 déc. 2005 à 16:21
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