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