Une représentation hiérarchie dans une table consiste à stocker pour chaque enregistrement l'identifiant de son père.
Par exemple pour représenter cette hiérarchie :
- Europe
- France
- Lorraine
- Alsace
- Allemagne
- Ruhr
- Saar
- France
On utilisera une table de ce style :
id | libelle | id_pere |
---|---|---|
1 | Europe | - |
2 | France | 1 |
3 | Allemagne | 1 |
4 | Alsace | 2 |
5 | Lorraine | 2 |
6 | Ruhr | 3 |
7 | Saar | 3 |
Maintenant comment récupérer cette hiérarchie ? A ce que je sache, actuellement avec MySQL?, on ne peut pas le faire en une seule requête SQL (contrairement à ORACLE). Par conséquence, il nous faut ruser en utilisant une fonction récursive.
En PHP cela nous donne :
<?php function select_recursif($id_pere = null) { $rows = array(); $i = 0; $requete = "SELECT * FROM matable WHERE id_pere"; $requete .= ($id_pere == null) ? ' is null' : ' = '.$id_pere; $res = $GLOBALS['db']->query($requete); while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) { $rows[$i] = $row; $rows[$i]['fils'] = select_recursif($row['for_idt']); ++$i; } $res->free(); return ((!$i) ? null : $rows); } require_once('DB.php'); $db = DB::connect('mysql://root:@localhost/mabase', true); if (DB::isError($db)) die($db->getMessage()); print_r (select_recursif()); ?>
Bonjour,
RépondreSupprimerN'existe-t-il vraiment pas de solution afin d'executer une sorte de requête récursive MySQL retournant l'ensemble des résultats d'un arbre, jusqu'a la racine :)
Avec Postgresql, c'est possible => https://charlycoste.wordpress.com/2011/12/26/arborescences-et-postgresql/
RépondreSupprimer