Tu as plusieurs façons de faire, soit par requete, soit par tableau.
Par requete c'est peut etre plus simple si deja dans ta table ca serait bien de simuler un niveau 0 pour les groupes disons de premier niveau. Par exemple le Groupe2 il faut reussir a voir qu'il n'a pas de pere reel au dessus de lui.
Donc des lignes ou il y aurait par exemple (tu peux mettre une valeur comme rien du tout mais bon c peut etre plus facile avec une valeur pour comprendre)
ID| ZONENAME | NAME_ITEM | TYPE
--|-------------|-------------|-----
1 | RACINE | GROUPE2 | Z
2 | RACINE | GROUPE5 | Z
function recup($groupe)
{
$where = '';
if (isset($groupe))
$where = "WHERE Zonetable = '$groupe'";
else
$where = "WHERE Zonetable = 'RACINE'";
$sql = 'SELECT * FROM nomtable '.$where.' ORDER BY name_item';
$result = $this->db->query($sql); //Je considere que tu es dans un objet avec la db deja initiailisé
if (!$result) {
return false;
}
while ($myrow = $this->db->fetchArray($result)) {
if ($myrow['type'] == 'Z'){
recup($myrow['name_item']);
}
else {
//Affichage de la ligne
// ce que tu veux faire pour ton affichage
}
}
return true;
}
Voilà cette solution va te generer pas mal de requete suivant le nombre de niveau, groupe que tu peux avoir.
Une autre soution serait de tout recuperer dans un tableau en 1 seul requete et de faire le meme traitement en gros
function initRecup($groupe)
{
$sql = 'SELECT * FROM nomtable ORDER BY name_item';
$result = $this->db->query($sql); //Je considere que tu es dans un objet avec la db deja initiailisé
if (!$result) {
return false;
}
$tableau = array();
while ($myrow = $this->db->fetchArray($result)) {
$tableau[$myrow['name_item']] [] = $myrow;
}
affichage($tableau);
return true;
}
function affichage($tableau, $groupe)
{
if (isset($groupe)){
foreach ($tableau[$groupe] as $element)
{
if ($element['type'] == 'Z'){
affichage($tableau, $element['name_type']);
}
else
{
//Affichage
}
}
}
else{
$tabinit = $tableau;
foreach ($tableau as $key => $element)
{
if ($element['type'] == 'Z'){
affichage($tableau, $element['name_type']);
}
else
{
//Affichage
}
}
}
}
(Attention ceci est fait a main leve... j'ai pas teste )