Réaliser une boucle
t671
Messages postés
1476
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je souhaite réaliser un style d'arbre généalogique. Mais je ne sais pas où placer me boucle pour éviter de réécrire sans cesse la même chose.
1° génération : j'écris le 1° individu, puis je recherche et j'affiche ses conjoints/mariage.
2° génération/enfants : je recherche puis j'affiche les enfants de la génération précédente.
Ensuite je veux afficher la 3° génération, et ainsi de suite jusqu'à la fin de ma base.
Voici ce que j'écris :
Mais je n'arrive pas à faire la boucle pour lire toute la base ......
Là, j'affiche le 1° individu de la 2° génération et son 1° enfant !
Où dois-je placer ma boucle ?
Merci
Je souhaite réaliser un style d'arbre généalogique. Mais je ne sais pas où placer me boucle pour éviter de réécrire sans cesse la même chose.
1° génération : j'écris le 1° individu, puis je recherche et j'affiche ses conjoints/mariage.
2° génération/enfants : je recherche puis j'affiche les enfants de la génération précédente.
Ensuite je veux afficher la 3° génération, et ainsi de suite jusqu'à la fin de ma base.
Voici ce que j'écris :
/******1° génération*********** $select1 = 'SELECT * FROM individus WHERE nom = "'.$nom.'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") AND (SUBSTRING(date_naissance, -4) != "") ORDER BY RIGHT(date_naissance,4)'; $result1 = mysql_query($select1,$link) or die ('Erreur : '.mysql_error() ); $row1 = mysql_fetch_array($result1); echo '<table>'; echo '<tr height="70"><td style="border:1px solid white; text-align: center; font-size: 10px"><img src="images/garcon.gif">'; echo '<a href="index.php?page=fiche_indiv&famille='.$famille.'&id='.$row1['id'].'" target="_blank"><i>'.$row1['nom'].' '.$row1['prenom'].'</i></a><br>'; if (($row1['sexe'] == M) && (!empty($row1['date_naissance']))) { echo 'né : '.$row1['date_naissance'].''; } else if (($row1['sexe'] == F) && (!empty($row1['date_naissance']))) { echo 'née : '.$row1['date_naissance'].''; } if (!empty($row1['date_dc'])) { echo '<br>dcd : '.$row1['date_dc'].''; } echo '</td>'; //******** Affichage conjoints/mariage $tonarray = array(); if (!empty($row1['date_mariage_1'])) { $marg_1 = substr($row1['date_mariage_1'], -4); $date_marg1 = explode (" ",$row1['date_mariage_1']); if ($date_marg1[0] == "Avant") { $marg_1 = $marg_1 - 1 ; } if ($date_marg1[0] == "Après" || $date_marg1[0] == "Entre" || $date_marg1[0] == "Vers") { $marg_1 = $marg_1 + 1 ; } } if (!empty($row1['date_mariage_2'])) { $marg_2 = substr($row1['date_mariage_2'], -4); $date_marg2 = explode (" ",$row1['date_mariage_2']); if ($date_marg2[0] == "Avant") { $marg_2 = $marg_2 - 1 ; } if ($date_marg2[0] == "Après" || $date_marg2[0] == "Entre" || $date_marg2[0] == "Vers") { $marg_2 = $marg_2 + 1 ; } } if (!empty($row1['date_mariage_3'])) { $marg_3 = substr($row1['date_mariage_3'], -4); $date_marg3 = explode (" ",$row1['date_mariage_3']); if ($date_marg3[0] == "Avant") { $marg_3 = $marg_3 - 1 ; } if ($date_marg3[0] == "Après" || $date_marg3[0] == "Entre" || $date_marg3[0] == "Vers") { $marg_3 = $marg_3 + 1 ; } } if (!empty($row1['date_mariage_4'])) { $marg_4 = substr($row1['date_mariage_4'], -4); $date_marg4 = explode (" ",$row1['date_mariage_4']); if ($date_marg4[0] == "Avant") { $marg_4 = $marg_4 - 1 ; } if ($date_marg4[0] == "Après" || $date_marg4[0] == "Entre" || $date_marg4[0] == "Vers") { $marg_4 = $marg_4 + 1 ; } } $tonarray[0]=array("mariage" => $marg_1 ,"date_mariage" => $row1['date_mariage_1'] , "conjoint" => $row1['num_cj_1'] , "acte_mariage" => $row1['acte_mariage_1']); $tonarray[1]=array("mariage" => $marg_2 ,"date_mariage" => $row1['date_mariage_2'] , "conjoint" => $row1['num_cj_2'] , "acte_mariage" => $row1['acte_mariage_2']); $tonarray[2]=array("mariage" => $marg_3 ,"date_mariage" => $row1['date_mariage_3'] , "conjoint" => $row1['num_cj_3'] , "acte_mariage" => $row1['acte_mariage_3']); $tonarray[3]=array("mariage" => $marg_4 ,"date_mariage" => $row1['date_mariage_4'] , "conjoint" => $row1['num_cj_4'] , "acte_mariage" => $row1['acte_mariage_4']); sort($tonarray); for($i=0; $i<=3; $i++) { if ($tonarray[$i]['conjoint'] != "") { $query4 = 'SELECT id,num_indiv,famille,nom,prenom,sexe,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' '; //ORDER BY (SUBSTRING($tonarray[$i]['date_mariage'], -4)) ASC $result4 = mysql_query($query4) or die(mysql_error()); $row4 = mysql_fetch_array($result4); if (!empty($tonarray[$i]['date_mariage'])) { echo '<td align="center" style="border:1px solid white; font-size: 10px" >X : '.$tonarray[$i]['date_mariage'].'<br>'; } else { echo '<td align="center" style="border:1px solid white; font-size: 10px" >X : ?<br>'; } if ($row4['sexe'] == M) { echo '<img src="images/garcon.gif">'; } else { echo '<img src="images/fille.gif">'; } echo '<a href="index.php?page=fiche_indiv&famille='.$famille.'&id='.$row4['id'].'" target="_blank"><i>'.$row4['nom'].' '.$row4['prenom'].'</i></a><br>'; if (($row4['sexe'] == M) && (!empty($row4['date_naissance']))) { echo ' né : '.$row4['date_naissance'].''; } else if (($row4['sexe'] == F) && (!empty($row4['date_naissance']))) { echo ' née : '.$row4['date_naissance'].''; } if (!empty($row4['date_dc'])) { echo '<br> dcd : '.$row4['date_dc'].''; } echo '</td>'; } } echo '</tr><tr><td height="10"></td></tr>'; //******2° génération/enfants*********** if ($row1['sexe'] == M) { $select3 = 'SELECT * FROM individus WHERE num_pere = "'.$row1['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)'; $result3 = mysql_query($select3,$link) or die ('Erreur : '.mysql_error() ); } elseif ($row1['sexe'] == F) { $select3 = 'SELECT * FROM individus WHERE num_mere = "'.$row1['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)'; $result3 = mysql_query($select3,$link) or die ('Erreur : '.mysql_error() ); } while ($row3 = mysql_fetch_array($result3)) { echo '<tr>'; echo '<td></td> <td style="font-size: 10px"><img src="images/desc_1.jpg" width="120">3</td> <td align="center" style="border:1px solid white; font-size: 10px" >'; if ($row3['sexe'] == M) { echo '<img src="images/garcon.gif">'; } else { echo '<img src="images/fille.gif">'; } echo '<a href="index.php?page=fiche_indiv&famille='.$famille.'&id='.$row3['id'].'" target="_blank"><i>'.$row3['nom'].' '.$row3['prenom'].'</i></a><br>'; if (($row3['sexe'] == M) && (!empty($row3['date_naissance']))) { echo ' né : '.$row3['date_naissance'].''; } else if (($row3['sexe'] == F) && (!empty($row3['date_naissance']))) { echo ' née : '.$row3['date_naissance'].''; } if (!empty($row3['date_dc'])) { echo '<br> dcd : '.$row3['date_dc'].''; } echo '</td>'; //******** Affichage conjoints/mariage $tonarray = array(); if (!empty($row3['date_mariage_1'])) { $marg_1 = substr($row3['date_mariage_1'], -4); $date_marg1 = explode (" ",$row3['date_mariage_1']); if ($date_marg1[0] == "Avant") { $marg_1 = $marg_1 - 1 ; } if ($date_marg1[0] == "Après" || $date_marg1[0] == "Entre" || $date_marg1[0] == "Vers") { $marg_1 = $marg_1 + 1 ; } } if (!empty($row3['date_mariage_2'])) { $marg_2 = substr($row3['date_mariage_2'], -4); $date_marg2 = explode (" ",$row3['date_mariage_2']); if ($date_marg2[0] == "Avant") { $marg_2 = $marg_2 - 1 ; } if ($date_marg2[0] == "Après" || $date_marg2[0] == "Entre" || $date_marg2[0] == "Vers") { $marg_2 = $marg_2 + 1 ; } } if (!empty($row3['date_mariage_3'])) { $marg_3 = substr($row3['date_mariage_3'], -4); $date_marg3 = explode (" ",$row3['date_mariage_3']); if ($date_marg3[0] == "Avant") { $marg_3 = $marg_3 - 1 ; } if ($date_marg3[0] == "Après" || $date_marg3[0] == "Entre" || $date_marg3[0] == "Vers") { $marg_3 = $marg_3 + 1 ; } } if (!empty($row3['date_mariage_4'])) { $marg_4 = substr($row3['date_mariage_4'], -4); $date_marg4 = explode (" ",$row3['date_mariage_4']); if ($date_marg4[0] == "Avant") { $marg_4 = $marg_4 - 1 ; } if ($date_marg4[0] == "Après" || $date_marg4[0] == "Entre" || $date_marg4[0] == "Vers") { $marg_4 = $marg_4 + 1 ; } } $tonarray[0]=array("mariage" => $marg_1 ,"date_mariage" => $row3['date_mariage_1'] , "conjoint" => $row3['num_cj_1'] , "acte_mariage" => $row3['acte_mariage_1']); $tonarray[1]=array("mariage" => $marg_2 ,"date_mariage" => $row3['date_mariage_2'] , "conjoint" => $row3['num_cj_2'] , "acte_mariage" => $row3['acte_mariage_2']); $tonarray[2]=array("mariage" => $marg_3 ,"date_mariage" => $row3['date_mariage_3'] , "conjoint" => $row3['num_cj_3'] , "acte_mariage" => $row3['acte_mariage_3']); $tonarray[3]=array("mariage" => $marg_4 ,"date_mariage" => $row3['date_mariage_4'] , "conjoint" => $row3['num_cj_4'] , "acte_mariage" => $row3['acte_mariage_4']); sort($tonarray); for($i=0; $i<=3; $i++) { if ($tonarray[$i]['conjoint'] != "") { $query4 = 'SELECT id,num_indiv,famille,nom,prenom,sexe,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' '; //ORDER BY (SUBSTRING($tonarray[$i]['date_mariage'], -4)) ASC $result4 = mysql_query($query4) or die(mysql_error()); $row4 = mysql_fetch_array($result4); if (!empty($tonarray[$i]['date_mariage'])) { echo '<td align="center" style="border:1px solid white; font-size: 10px" >X : '.$tonarray[$i]['date_mariage'].'<br>'; } else { echo '<td align="center" style="border:1px solid white; font-size: 10px" >X : ?<br>'; } if ($row4['sexe'] == M) { echo '<img src="images/garcon.gif">'; } else { echo '<img src="images/fille.gif">'; } echo '<a href="index.php?page=fiche_indiv&famille='.$famille.'&id='.$row4['id'].'" target="_blank"><i>'.$row4['nom'].' '.$row4['prenom'].'</i></a><br>'; if (($row4['sexe'] == M) && (!empty($row4['date_naissance']))) { echo ' né : '.$row4['date_naissance'].''; } else if (($row4['sexe'] == F) && (!empty($row4['date_naissance']))) { echo ' née : '.$row4['date_naissance'].''; } if (!empty($row4['date_dc'])) { echo '<br> dcd : '.$row4['date_dc'].''; } echo '</td>'; } } if ($row3['sexe'] == M) { $select3 = 'SELECT * FROM individus WHERE num_pere = "'.$row3['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)'; $result3 = mysql_query($select3,$link) or die ('Erreur : '.mysql_error() ); } elseif ($row3['sexe'] == F) { $select3 = 'SELECT * FROM individus WHERE num_mere = "'.$row3['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)'; $result3 = mysql_query($select3,$link) or die ('Erreur : '.mysql_error() ); } echo '</tr><tr><td height="10"></td></tr>'; } .............etc...............10° génération ..............
Mais je n'arrive pas à faire la boucle pour lire toute la base ......
Là, j'affiche le 1° individu de la 2° génération et son 1° enfant !
Où dois-je placer ma boucle ?
Merci
A voir également:
- Réaliser une boucle
- Réaliser un organigramme - Guide
- Réaliser un camembert graphique - Guide
- Comment réaliser une table des matières sur word - Guide
- Boucle excel sans macro - Forum Excel
- Comment réaliser un graphique sur excel - Guide
2 réponses
Bonjour,
Pour ce genre de chose... il est préférable d'utiliser la représentation intervallaire. (ou arbre intervallaire)
Regarde ces tutos :
https://stephanelegrand.wordpress.com/2009/01/03/gestion-dune-structure-darbre-sous-mysql/
https://zestedesavoir.com/tutoriels/250/la-representation-intervallaire/#3-4799_manipulation-de-noeuds
Grâce à cette méthode il est facile d'obtenir tout ou parti d'un arbre (arbre / noeud / branche... appelle ça comme tu veux ^^ )
Pour ce genre de chose... il est préférable d'utiliser la représentation intervallaire. (ou arbre intervallaire)
Regarde ces tutos :
https://stephanelegrand.wordpress.com/2009/01/03/gestion-dune-structure-darbre-sous-mysql/
https://zestedesavoir.com/tutoriels/250/la-representation-intervallaire/#3-4799_manipulation-de-noeuds
Grâce à cette méthode il est facile d'obtenir tout ou parti d'un arbre (arbre / noeud / branche... appelle ça comme tu veux ^^ )
Merci jordane45 ! C'est quand même complexe ............ !!!
En plus, ma base existe déjà et je ne vois pas comment rajouter les colonnes gauche et droite pour les remplir correctement.
Par contre, dans ma base, chaque individu contient un champ avec l'id du père et l'id de la mère. Mais je ne peux pas faire une formule mathématique avec çà !?
En plus, ma base existe déjà et je ne vois pas comment rajouter les colonnes gauche et droite pour les remplir correctement.
Par contre, dans ma base, chaque individu contient un champ avec l'id du père et l'id de la mère. Mais je ne peux pas faire une formule mathématique avec çà !?