Page 1 sur 1

boucle while

Posté : 20 nov. 2014, 10:29
par t671
Bonjour,

J'ai un programme php qui lit le contenu de ma base généalogique. Je veux sortir tous les individus sous forme d'arbre. Donc je lis le 1° individu (le plus (ancien), puis je cherche ses conjoints que j'affiche, puis je cherche ses enfants que j'affiche, puis pour chaque enfant, je veux chercher ses conjoints, puis leurs enfants ..............
//***** rech des cjts ******
while ($row11 = mysql_fetch_array($result11))
{
        echo '<tr><td....................
        echo '</td></tr>';        
                            
    //*****rech enf******
        
        $select2 = 'SELECT * FROM individus WHERE num_pere = "'.$row1['num_indiv'].'" ORDER BY RIGHT(date_naissance,4)';    
        $result2 = mysql_query($select2,$link) or die ('Erreur : '.mysql_error() );
        
        while ($row2 = mysql_fetch_array($result2)) 
        {                    
            echo '<tr><td....................
            echo '</td></tr>';
            
            $select11 = 'SELECT * FROM individus WHERE num_indiv LIKE "'.$row2['num_cj_1'].'"'; 
            $result11 = mysql_query($select11,$link) or die ('Erreur : '.mysql_error() );
            $gen=$gen+0.1;                
        }
}
Là, j'affiche mon premier individu, ses conjoints, les enfants, et après plus rien ! La boucle ne se fait pas !
Pourquoi ?

Re: boucle while

Posté : 20 nov. 2014, 11:43
par xTG
C'est pas clair ton code. Je ne vois pas ce que tu fais par rapport à ton explication textuelle en raison des portions de code supprimées. (et le manque de commentaire)

Mais pourquoi vouloir faire de la récursivité à base de boucle ? C'est pas simple...
Utilises plutôt une fonction pour récupérer les enfants, ect.
Et construis ta récursivité sur l'appel de fonction, cela sera plus clair et plus simple.

Re: boucle while

Posté : 20 nov. 2014, 15:23
par t671
Donc, je fais une boucle while avec dedans une fonction qui recherche les conjoints, puis une fonction qui recherche les enfants .......... ???

Re: boucle while

Posté : 20 nov. 2014, 19:44
par xTG
Euh pas exactement...
La récursivité c'est pas non plus aussi simple. ;)
De la bonne lecture sur le sujet : http://www.developpez.net/forums/d2137/ ... cursivite/

Il n'y a qu'à traiter l'élément parent-enfant en fait.
Il faut d'abord la liste des personnes n'ayant aucun parent.
Puis pour chaque personne de cette liste :

Code : Tout sélectionner

Pour chaque personne faire : traiterConjoint(personne)
Pour chaque personne il faut chercher s'il a un conjoint (et donc potentiellement des enfants) :

Code : Tout sélectionner

Fonction traiterConjoint(personne) : Recherche du conjoint Si personne a un conjoint : traiterEnfant(personne, conjoint)
Pour chaque couple il faut rechercher les enfants, et chaque enfant est traité comme une personne pouvant avoir un conjoint, ect.

Code : Tout sélectionner

Fonction traiterEnfant(personne, conjoint) Recherche des enfants de personne et conjoint) Si personne a des enfants : Pour chaque enfant faire : traiterConjoint(enfant)
C'est l'algorithme basique, après faut l'améliorer pour traiter les personnes n'étant pas en couple mais ayant des enfants si besoin, ect.