Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
UNE ARBORESCENCE.
Information sur la source
Description
il existe deux facons de faire une arborescence, la naive, et l'autre. pre-requis : http://sqlpro.developpez.com/cours/arborescence/ je propose ici, quelques fonctions en php, qui permettent d'utiliser de facon simple, et en mysql4, ce qui est explique dans le tuto (suite a un bloquage sur le forum, j'ai decide de recoder ca). on peut donc ajouter dans l'arborescence, supprimer un element, ou supprimer un element et les sous-branches. les fonctions d'affichages sont aussi fournies (d'ailleur, elles sont en mode debug). c'est fait juste pour illustrer le tuto, normalement, on devrais en faireu ne class php5, voir une abstract class + deux implementations, enfin j'ai pas trop reflechi au schemat, mais c'etait pas vraiment le but de la source...
Source
- <?php
- // http://sqlpro.developpez.com/cours/arborescence/
- mysql_connect(............) or die(mysql_error());
- mysql_query('CREATE DATABASE IF NOT EXISTS tests') or die(mysql_error());
- mysql_query('USE tests') or die(mysql_error());
-
-
- function array_top($s){
- $top=array_pop($s);
- array_push($s, $top);
- return $top;
- }
-
-
- //MODELE 1 D'ARBO :
-
- //creation de la table
- mysql_query('CREATE TABLE IF NOT EXISTS arbo1(
- id INT UNSIGNED AUTO_INCREMENT,
- nom VARCHAR(100),
- id_parent INT UNSIGNED,
- PRIMARY KEY(id))
- ') or die(mysql_error());
-
- //ici, les insertions se font naturellement. Exemple
- //mysql_query('INSERT INTO arbo1(nom, id_parent) VALUES ("parent", 0), ("enfant1", 1), ("enfant2", 1), ("enfant de enfant1", 2), ("enfant de enfant 2", 3) ') or die(mysql_error());
-
- //mais la fonction d'affichage est recursive...
- function affArbo1($id=0){
- echo '<ul>';
- $r=mysql_query('SELECT id, nom FROM arbo1 WHERE id_parent='.$id) or die(mysql_error());
- while($data=mysql_fetch_assoc($r)){
- echo '<li>'.$data['nom'];
- affArbo($data['id']);
- echo '</li>';
- }
- echo '</ul>';
- }
- //affArbo1();
-
-
-
-
-
-
-
- // MODELE 2 D'ARBO
-
- //mysql_query('DROP TABLE arbo2');
- // creation de la table
- mysql_query('CREATE TABLE IF NOT EXISTS arbo2(
- id INT UNSIGNED AUTO_INCREMENT,
- nom VARCHAR(100),
- poidG INT UNSIGNED,
- poidD INT UNSIGNED,
- PRIMARY KEY(id))
- ') or die(mysql_error());
- // insertion dans la racine
- //mysql_query('INSERT INTO arbo2(nom, poidG, poidD) VALUES ("parent", 0, 1) ') or die(mysql_error());
- // fonction d'ajout dans l'arbo : on ajoute sous l'id $id, avec le nom $nom.
- function addInArbo2($id, $nom){
- $req=mysql_query('SELECT poidD FROM arbo2 WHERE id='.$id) or die(mysql_error());
- $poidD=mysql_fetch_row($req);
- if ($poidD===false) throw new Exception('id invalide');
- $poidD=$poidD[0];
-
- mysql_query('UPDATE arbo2 SET poidD=poidD+2 WHERE poidD >= '.$poidD) or die(mysql_error());
- mysql_query('UPDATE arbo2 SET poidG=poidG+2 WHERE poidG > '.$poidD) or die(mysql_error());
-
- mysql_query('INSERT INTO arbo2(nom, poidG, poidD) VALUES("'.$nom.'", '.($poidD).', '.($poidD+1).')') or die(mysql_error());
- }
-
- /*
- addInArbo2(1, 'enfant');addInArbo2(1, 'enfant');addInArbo2(1, 'enfant');
- addInArbo2(2, 'enfant');addInArbo2(2, 'enfant');addInArbo2(2, 'enfant');
- addInArbo2(3, 'enfant');addInArbo2(3, 'enfant');addInArbo2(4, 'enfant');
- */
-
- // suppression de l'element $id. (les sous menus prennent la place de l'element.)
- function dellArbo2($id){
- $req=mysql_query('SELECT poidG, poidD FROM arbo2 WHERE id='.$id) or die(mysql_error());
- $poidG=mysql_fetch_assoc($req);
- if ($poidG===false) throw new Exception('id invalide');
- $poidD=$poidG['poidD'];
- $poidG=$poidG['poidG'];
-
- mysql_query('DELETE FROM arbo2 WHERE id='.$id) or die(mysql_error());
-
- mysql_query('UPDATE arbo2 SET poidD=poidD+1, poidG=poidG+1 WHERE poidD < '.$poidD.' AND poidG > '.$poidG) or die(mysql_error());
- mysql_query('UPDATE arbo2 SET poidG=poidG-2 WHERE poidG >= '.$poidG) or die(mysql_error());
- mysql_query('UPDATE arbo2 SET poidD=poidD-2 WHERE poidD >= '.$poidG) or die(mysql_error());
- }
-
- // suppression de l'element $id, et de tout les sous menu.
- function delAllSub2($id){
- $req=mysql_query('SELECT poidG, poidD FROM arbo2 WHERE id='.$id) or die(mysql_error());
- $poidG=mysql_fetch_assoc($req);
- if ($poidG===false) throw new Exception('id invalide');
- $poidD=$poidG['poidD'];
- $poidG=$poidG['poidG'];
-
- mysql_query('DELETE FROM arbo2 WHERE poidD<='.$poidD.' AND poidG>='.$poidG) or die(mysql_error());
-
- mysql_query('UPDATE arbo2 SET poidG=poidG-'.($poidD-$poidG+1).' WHERE poidG >= '.$poidG) or die(mysql_error());
- mysql_query('UPDATE arbo2 SET poidD=poidD-'.($poidD-$poidG+1).' WHERE poidD >= '.$poidD) or die(mysql_error());
-
- }
-
- // affichage de l'arbo 2.
- function affArbo2(){
- echo '<ul>';
- $r=mysql_query('SELECT id, nom, poidD, poidG FROM arbo2 ORDER BY poidG') or die(mysql_error());
- $l=0;
- $stack=array();
- while($data=mysql_fetch_assoc($r)){
- do {
- $top=array_top($stack);
- if ($top===null || $top>$data['poidG']+1){
- break;
- }else {
- echo '</ul>';
- array_pop($stack);
- }
- } while(true);
- echo '<li>'.$data['nom'].' : [ '.$data['poidG'].', '.$data['poidD'].'] ->'.$data['id'];
- if ($data['poidD']==$data['poidG']+1)
- echo '</li>';
- else{
- echo '<ul>';
- array_push($stack, $data['poidD']);
- }
- }
- echo '</ul>';
- }
-
-
- //dellArbo2(2);
-
- //delAllSub2(2);
-
- affArbo2();
-
- ?>
<?php
// http://sqlpro.developpez.com/cours/arborescence/
mysql_connect(............) or die(mysql_error());
mysql_query('CREATE DATABASE IF NOT EXISTS tests') or die(mysql_error());
mysql_query('USE tests') or die(mysql_error());
function array_top($s){
$top=array_pop($s);
array_push($s, $top);
return $top;
}
//MODELE 1 D'ARBO :
//creation de la table
mysql_query('CREATE TABLE IF NOT EXISTS arbo1(
id INT UNSIGNED AUTO_INCREMENT,
nom VARCHAR(100),
id_parent INT UNSIGNED,
PRIMARY KEY(id))
') or die(mysql_error());
//ici, les insertions se font naturellement. Exemple
//mysql_query('INSERT INTO arbo1(nom, id_parent) VALUES ("parent", 0), ("enfant1", 1), ("enfant2", 1), ("enfant de enfant1", 2), ("enfant de enfant 2", 3) ') or die(mysql_error());
//mais la fonction d'affichage est recursive...
function affArbo1($id=0){
echo '<ul>';
$r=mysql_query('SELECT id, nom FROM arbo1 WHERE id_parent='.$id) or die(mysql_error());
while($data=mysql_fetch_assoc($r)){
echo '<li>'.$data['nom'];
affArbo($data['id']);
echo '</li>';
}
echo '</ul>';
}
//affArbo1();
// MODELE 2 D'ARBO
//mysql_query('DROP TABLE arbo2');
// creation de la table
mysql_query('CREATE TABLE IF NOT EXISTS arbo2(
id INT UNSIGNED AUTO_INCREMENT,
nom VARCHAR(100),
poidG INT UNSIGNED,
poidD INT UNSIGNED,
PRIMARY KEY(id))
') or die(mysql_error());
// insertion dans la racine
//mysql_query('INSERT INTO arbo2(nom, poidG, poidD) VALUES ("parent", 0, 1) ') or die(mysql_error());
// fonction d'ajout dans l'arbo : on ajoute sous l'id $id, avec le nom $nom.
function addInArbo2($id, $nom){
$req=mysql_query('SELECT poidD FROM arbo2 WHERE id='.$id) or die(mysql_error());
$poidD=mysql_fetch_row($req);
if ($poidD===false) throw new Exception('id invalide');
$poidD=$poidD[0];
mysql_query('UPDATE arbo2 SET poidD=poidD+2 WHERE poidD >= '.$poidD) or die(mysql_error());
mysql_query('UPDATE arbo2 SET poidG=poidG+2 WHERE poidG > '.$poidD) or die(mysql_error());
mysql_query('INSERT INTO arbo2(nom, poidG, poidD) VALUES("'.$nom.'", '.($poidD).', '.($poidD+1).')') or die(mysql_error());
}
/*
addInArbo2(1, 'enfant');addInArbo2(1, 'enfant');addInArbo2(1, 'enfant');
addInArbo2(2, 'enfant');addInArbo2(2, 'enfant');addInArbo2(2, 'enfant');
addInArbo2(3, 'enfant');addInArbo2(3, 'enfant');addInArbo2(4, 'enfant');
*/
// suppression de l'element $id. (les sous menus prennent la place de l'element.)
function dellArbo2($id){
$req=mysql_query('SELECT poidG, poidD FROM arbo2 WHERE id='.$id) or die(mysql_error());
$poidG=mysql_fetch_assoc($req);
if ($poidG===false) throw new Exception('id invalide');
$poidD=$poidG['poidD'];
$poidG=$poidG['poidG'];
mysql_query('DELETE FROM arbo2 WHERE id='.$id) or die(mysql_error());
mysql_query('UPDATE arbo2 SET poidD=poidD+1, poidG=poidG+1 WHERE poidD < '.$poidD.' AND poidG > '.$poidG) or die(mysql_error());
mysql_query('UPDATE arbo2 SET poidG=poidG-2 WHERE poidG >= '.$poidG) or die(mysql_error());
mysql_query('UPDATE arbo2 SET poidD=poidD-2 WHERE poidD >= '.$poidG) or die(mysql_error());
}
// suppression de l'element $id, et de tout les sous menu.
function delAllSub2($id){
$req=mysql_query('SELECT poidG, poidD FROM arbo2 WHERE id='.$id) or die(mysql_error());
$poidG=mysql_fetch_assoc($req);
if ($poidG===false) throw new Exception('id invalide');
$poidD=$poidG['poidD'];
$poidG=$poidG['poidG'];
mysql_query('DELETE FROM arbo2 WHERE poidD<='.$poidD.' AND poidG>='.$poidG) or die(mysql_error());
mysql_query('UPDATE arbo2 SET poidG=poidG-'.($poidD-$poidG+1).' WHERE poidG >= '.$poidG) or die(mysql_error());
mysql_query('UPDATE arbo2 SET poidD=poidD-'.($poidD-$poidG+1).' WHERE poidD >= '.$poidD) or die(mysql_error());
}
// affichage de l'arbo 2.
function affArbo2(){
echo '<ul>';
$r=mysql_query('SELECT id, nom, poidD, poidG FROM arbo2 ORDER BY poidG') or die(mysql_error());
$l=0;
$stack=array();
while($data=mysql_fetch_assoc($r)){
do {
$top=array_top($stack);
if ($top===null || $top>$data['poidG']+1){
break;
}else {
echo '</ul>';
array_pop($stack);
}
} while(true);
echo '<li>'.$data['nom'].' : [ '.$data['poidG'].', '.$data['poidD'].'] ->'.$data['id'];
if ($data['poidD']==$data['poidG']+1)
echo '</li>';
else{
echo '<ul>';
array_push($stack, $data['poidD']);
}
}
echo '</ul>';
}
//dellArbo2(2);
//delAllSub2(2);
affArbo2();
?>
Conclusion
pour tester, vous devrez de-commenter quelques lignes (les insertions, etc...)
Sources de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | | | 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 | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|