Accueil > Forum > > > > Représentation intervallaire des arborescences et mise en oeuvre
Représentation intervallaire des arborescences et mise en oeuvre
dimanche 17 février 2008 à 23:44:29 |
Représentation intervallaire des arborescences et mise en oeuvre

hametsu21
|
Bonjour, après de nombreuses recherches je n'arrive toujours pas
réellement à comprendre comment mettre en œuvre une arborescence dans
une table mysql  . j'ai une table `pages` où j'ajoute comme le nom de la table l'indique des ... pages ! une
page peut avoir plusieurs "enfants" et appartenir à un "parent", chaque
"enfant" peut être "parent" de plusieurs autres "enfants" etc... j'ai lu un étonnant article sur les "représentation intervallaire des arborescences" : lire l'articleMais
je ne vois pas réellement comment l'utiliser pour créer par exemple une
liste (<ul><li></li></ul>) ou une liste de
sélection (<select><option></option></select>). Si vous pouviez ne serais-ce que m'aiguiller ou me fournir d'autres liens afin que je poursuive mes recherches ça serait cool :D Au revoir ! PS : je tiens à préciser que c'est pour un projet d'étude et pas une lubie ;)
|
|
lundi 18 février 2008 à 08:02:26 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

malalam
|
Hello,
l'article est en effet intéressant. Et le principe fort simple! Qu'est ce que tu ne comprends pas là-dedans ? Commence par coucher sur papier ton arbo (le deuxième type de représentation me semble plus simple pour ça), note tes bordures gauche et droite pour chaque feuille et noeud, le reste devrait être évident. Un exemple linéaire : dossier : 1-6 sous-dossier : 2-5 fichier : 3-4
mettons que ton fichier ait un id = 3 pour reproduire l'arbo : SELECT * FROM arbo WHERE (BG < 3 AND bd > 4) OR id = 3 (en pratique, on procèdera différemment sans doute, dans le cadre d'un script dynamique).
Le défaut de cette représentation, à garder en mémoire, c'est qu'il faut une arbo complète : difficile d'ajouter une profondeur en cours de route (par contre, on peut ajouter des noeuds et des feuilles si on ne sort pas de l'intervalle défini au départ).
|
|
lundi 18 février 2008 à 13:00:03 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

hametsu21
|
Oui, j'ai bien compris le principe qu'un noeud englobe d'autres noeuds / éléments mais là ou je coince est par exemple pour ajouter une page ou générer le menu. - Lors de l'ajout d'une page, il me faudrait un select affichant l'ensemble des pages, sous pages, etc.
- Sur la page index, il me faudrait le menu générer avec des listes et dont les noeuds / éléments fils sont cachés jusqu'au clic de l'utilisateur (en javascript, pas un problème).
Pour mieux t'illustrer mon problèmefunction display_tree($root) { // retrieve the left and right value of the $root node $result = mysql_query('SELECT lft, rgt FROM tree '. 'WHERE title="'.$root.'";'); $row = mysql_fetch_array($result);
// start with an empty $right stack $right = array();
// now, retrieve all descendants of the $root node $result = mysql_query('SELECT title, lft, rgt FROM tree '. 'WHERE lft BETWEEN '.$row['lft'].' AND '. $row['rgt'].' ORDER BY lft ASC;');
// display each row while ($row = mysql_fetch_array($result)) { // only check stack if there is one if (count($right)>0) { // check if we should remove a node from the stack while ($right[count($right)-1]<$row['rgt']) { array_pop($right); } }
// display indented node title echo str_repeat(' ',count($right)).$row['title']."\n";
// add this node to the stack $right[] = $row['rgt']; } }
Cette fonction permet d'afficher un noeud à partir d'un nom de noeud passé en paramètre, elle répéte des espaces pour indenter les différents noeuds / éléments. A la place, il faudrait que je trouve comment afficher un select ou une liste, donc de générer un tableau pour ensuite le parcourir à l'aide de foreach. De plus, j'ai l'impression que ce système nécessite un élément "root". Y'a peut être plus simple ? mes noeuds pourrait avoir des centaines d'éléments, et une profondeur d'environ 5 niveaux, la majorité des requête serait des selects (75%)... Si vous avez eu le courage de tout lire eet que vous avez compris ! Je vous tire mon chapeau :p
|
|
lundi 18 février 2008 à 14:33:36 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

hametsu21
|
J'ai vu ça aussi : We can use the depth value to indent our category names with the CONCAT and REPEAT string functions:
SELECT CONCAT( REPEAT(' ', COUNT(parent.name) - 1), node.name) AS name FROM nested_category AS node, nested_category AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft;
+-----------------------+ | name | +-----------------------+ | ELECTRONICS | | TELEVISIONS | | TUBE | | LCD | | PLASMA | | PORTABLE ELECTRONICS | | MP3 PLAYERS | | FLASH | | CD PLAYERS | | 2 WAY RADIOS | +-----------------------+
Of course, in a client-side application you will be more likely to
use the depth value directly to display your hierarchy. Web developers
could loop through the tree, adding <li></li> and
<ul></ul> tags as the depth number increases and decreases. Et ce qui coince c'est la dernière phrase, comment rajouter ces <li></li> et
<ul></ul> lorsque la prodondeur augmente ou diminue...
|
|
lundi 18 février 2008 à 15:02:08 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

hametsu21
|
ça devrait donner un truc dans le genre...
$query = 'SELECT `node`.`title`, (COUNT(`parent`.`title`) - 1) AS `lvl`' . ' FROM `tree` AS `node`, `tree` AS `parent`' . ' WHERE `node`.`lft` BETWEEN `parent`.`lft` AND `parent`.`rgt`' . ' GROUP BY `node`.`title` ORDER BY `node`.`lft`';
$result = mysql_query ($query) or die (mysql_error ());
$lvl = 0;
while ($row = mysql_fetch_assoc ($result)) { if ($row['lvl'] > $lvl) { $lvl = $row['lvl']; echo '<ul>'; }
echo '<li>' . $row['title'], $row['lvl'] . '</li>';
if ($row['lvl'] < $lvl) { echo '</ul>'; $lvl--; } }
mais ça me donne pas le résultat attendu, et le must serait de mettre tout sous forme d'un immense tableau ou je testerai une valeur pour en extraire les enfants... enfin bref, cela reste utopique :(
|
|
lundi 18 février 2008 à 20:22:34 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

malalam
|
Hello,
attention : cet algo n'est PAS fait pour une arbo que tu es amenée à modifier fréquemment. Nref, l'ajout de pages, par exemple, sera une plaie avec ce système. En général, dans une arbo, on a une racine...mais tu n'es pas obligé d'en avoir une avec ce principe, non. C'est une arbo purement SQL...si tu as besoin de la retravailler en php...autant ne pas utiliser cet algo. Ca reste possible...mais pas comme tu le fais ;-) Si tu veux que je t'aide plus avant, comme j'ai la flemme de le faire moi-même, balance moi un create table avec ce que tu testes, les INSERT qui vont bien afin que j'ai une base toute prête. Et je jetterai un oeil.
|
|
lundi 18 février 2008 à 21:09:08 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

hametsu21
|
Par exemple :
-- -- Table structure for table `NEW_FAMILLE` --
CREATE TABLE `NEW_FAMILLE` ( `NFM_ID` int(11) NOT NULL auto_increment, `NFM_BG` int(11) default NULL, `NFM_BD` int(11) default NULL, `NFM_LIB` varchar(16) default NULL, PRIMARY KEY (`NFM_ID`) );;
-- -- Dumping data for table `NEW_FAMILLE` --
INSERT INTO `NEW_FAMILLE` VALUES (1, 1, 44, 'Transport'); INSERT INTO `NEW_FAMILLE` VALUES (2, 2, 21, 'Aérien'); INSERT INTO `NEW_FAMILLE` VALUES (3, 3, 4, 'Planeur'); INSERT INTO `NEW_FAMILLE` VALUES (4, 5, 6, 'Parachute'); INSERT INTO `NEW_FAMILLE` VALUES (5, 7, 8, 'Hélico'); INSERT INTO `NEW_FAMILLE` VALUES (6, 9, 10, 'Fusée'); INSERT INTO `NEW_FAMILLE` VALUES (7, 11, 12, 'ULM'); INSERT INTO `NEW_FAMILLE` VALUES (8, 13, 20, 'Avion'); INSERT INTO `NEW_FAMILLE` VALUES (9, 14, 15, 'Militaire'); INSERT INTO `NEW_FAMILLE` VALUES (10, 16, 17, 'Tourisme'); INSERT INTO `NEW_FAMILLE` VALUES (11, 18, 19, 'Civil'); INSERT INTO `NEW_FAMILLE` VALUES (12, 22, 35, 'Terrestre'); INSERT INTO `NEW_FAMILLE` VALUES (13, 23, 24, 'Vélo'); INSERT INTO `NEW_FAMILLE` VALUES (14, 25, 26, 'Voiture'); INSERT INTO `NEW_FAMILLE` VALUES (15, 27, 28, 'Camion'); INSERT INTO `NEW_FAMILLE` VALUES (16, 29, 34, 'Moto'); INSERT INTO `NEW_FAMILLE` VALUES (17, 30, 31, 'Side-car'); INSERT INTO `NEW_FAMILLE` VALUES (18, 32, 33, 'Trail'); INSERT INTO `NEW_FAMILLE` VALUES (19, 36, 43, 'Marin'); INSERT INTO `NEW_FAMILLE` VALUES (20, 37, 38, 'Planche à voile'); INSERT INTO `NEW_FAMILLE` VALUES (21, 39, 40, 'Paquebot'); INSERT INTO `NEW_FAMILLE` VALUES (22, 41, 42, 'Voilier');
Si tu arrives a créer une liste ordonner de chaque noeuds, enfants, éléments, etc. je te tire ma révérence ^^ Merci de ton aide :)
|
|
lundi 18 février 2008 à 22:16:37 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

malalam
|
Vu l'heure, on verra ça demain soir, je n'ai plus très envie de coder :-) Mais demain soir je regarde.
|
|
lundi 18 février 2008 à 23:00:11 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

malalam
|
Bon...finalement je l'ai fait ;-)
$sQuery = " SELECT node.NFM_LIB, count(parent.NFM_LIB) as parent_count FROM NEW_FAMILLE AS node, NEW_FAMILLE AS parent WHERE node.NFM_BG BETWEEN parent.NFM_BG AND parent.NFM_BD GROUP BY node.NFM_LIB ORDER BY node.NFM_BG "; $rQry = mysql_query($sQuery); $iDepth= 0; echo '<ul>'; while($aFetched = mysql_fetch_assoc($rQry)) { if($iDepth < $aFetched['parent_count']) { echo str_repeat('<ul>', $aFetched['parent_count'] - $iDepth); $iDepth = $aFetched['parent_count']; echo '<li>',$aFetched['NFM_LIB'], '</li>'; } elseif($iDepth > $aFetched['parent_count']) { echo str_repeat('</ul>', ++$iDepth - $aFetched['parent_count']); $iDepth = $aFetched['parent_count']; echo '<ul><li>',$aFetched['NFM_LIB'], '</li>'; } else { echo '<li>',$aFetched['NFM_LIB'], '</li>'; } } echo '</ul>';
|
|
mardi 19 février 2008 à 00:51:34 |
Re : Représentation intervallaire des arborescences et mise en oeuvre

hametsu21
|
c'est un sacré ... bordel :D je peux faire aucune séparation code/présentation à ce niveau et je me vois mal comment nommer les ul pour qu'avec javascript je cache les noeuds enfants T_T. Par contre... Chapeau, ça l'air de foncionner. Quelle méthode me conseille, au vu de ton expérience, pour réaliser ceci :
système de page
- ajouter une page - supprimer une page - editer une page
- une page peut se reférrer à une autre pouvant créer un système de catégorie, article, chapitre, section, paragraphe etc..
Je pense que j'ai pas finis d'angoisser >_>
|
|
Cette discussion est classée dans : table, représentation, oeuvre, intervallaire, arborescences
Répondre à ce message
Sujets en rapport avec ce message
Aide DELETE FROM mabase [ par Mmuller57 ]
Voilà, je vous explique, j'ai une table message(mySQL) qui contient 2 champs (un pseudo, et un message) c un peu comme un forum ;-), et j'aimerai que
AU SECOURS !!! ZIP ZIP [ par omnikod ]
Voilà mon pb :je voudrais que le script php lise à un certain moment (kan la base dépasse une certaine taille par exemple) les enregistrement d'une t
PB update table mysql ! [ par lolo ]
Comment pourrai-je faire pour mettre à jour une table mysql par le biais d'un formulaire (parcourir ...*.cvs) et d'un fichier php d'update de table my
problème de mise à jour de base de données [ par rildspael ]
Ben en fait maintenant j'ai refait ce code, je me suis concentré, j'ai tout analysé mais rien ne marche encore et je ne comprends pas : le voici :Donc
Comment insérer un champs image ds ma table ?? [ par inceV ]
Salut à tous et bonne année 2002 !!!Bon, je n'arrive pas à créer un champs 'image' ds ma table et je ne comprends pas tp commen ça marche, pourriez-vo
Argh html-couleur et PHP [ par Carrie ]
salut,je ne pige pas pourquoi ce code ne fonctionne pas ://--------------------------------------------------------------------function Parcours_arra
Argh html-couleur et PHP [ par Carrie ]
salut,je ne pige pas pourquoi ce code ne fonctionne pas ://--------------------------------------------------------------------function Parcours_arra
Liaison de table. [ par benett ]
Bojour à tous,Pouvez-vous m'expliquez comment gérer les liaisons de type N-N entre 2 tables, j'ai un fichier intermédiaire de créer, mais je ne sais p
Liaison de table. [ par benett ]
Bojour à tous,Pouvez-vous m'expliquez comment gérer les liaisons de type N-N entre 2 tables, j'ai un fichier intermédiaire de créer, mais je ne sais p
Liaison entre les tables [ par coupeau ]
BonjourJ'ai deux tablesune table documentation et une table mot-clé. Comment puis insérer plusieurs mots-clés (N: cela dépend du document parfois 1 mo
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|