Boucle while

t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un problème avec mes boucles while.
Je cherche à afficher des enregistrements qui sont liés par un de leurs champs.
Dans ma base, un enregistrement comporte notamment l'id, le num_indiv, le num_pere, .....
On retrouve automatiquement tous les num_pere en num_indiv.
En partant d'un enregistrement, je veux afficher tous ceux qui y sont liés en comparrant le num_indiv et le num_pere.
Donc j'affiche mon premier enregistrement. Je regarde son num_pere et je cherche le num_indiv équivalent pour l'afficher (jusque là, c'est ok).
Mais il peut y avoir plusieurs enregistrement qui ont le même num_pere. Dans ce cas ce serait des frères. Et je les affiche ......
Ensuite je dois chercher les enregistrements qui comportent un num_pere égal aux num_indiv des "frères" cités ci-dessus. etc .................
Et là, j'affiche une quantité d'enregistrements mais qui n'ont pas de rapport entre eux (hormis les deux premiers (row1 et row2) .....
Je dois avoir une erreur qqpart, mais où ???

$select1 = 'SELECT * FROM individus WHERE id LIKE "168"'; //je cherche le 1° enregistrement  
$result1 = mysql_query($select1,$link) or die ('Erreur : '.mysql_error() );  
$row1 = mysql_fetch_array($result1);  
echo '<b>'.$row1['nom'].' '.$row1['prenom'].'</b><br>';  
$select = 'SELECT * FROM individus' ; //je vais lancer une recherche sur la base complète    
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );  
while ($row = mysql_fetch_array($result))   
{  
 $select2 = 'SELECT * FROM individus WHERE num_pere LIKE "'.$row1['num_indiv'].'"';    
 $result2 = mysql_query($select2,$link) or die ('Erreur : '.mysql_error() );  
                while ($row2 = mysql_fetch_array($result2))   
               {  
                echo '<b>'.$row2['nom'].' '.$row2['prenom'].'</b><br>';  
                }  
                $row1['num_indiv'] = $row2['num_indiv'];  
}


Merci

11 réponses

alexandre
 
Salut,

1. Je ne comprends pas bien le résultat recherché. On cherche le père et les frères de chaque enregistrement ?

2. Utilise un "=" au lieu de LIKE.
'SELECT * FROM individus WHERE num_pere ='.$row1['num_indiv'].'; //Pas besoin des " car c'est un nombre numérique 


3. Pourquoi avoir écrit :
 $row1['num_indiv'] = $row2['num_indiv']; 
0
Utilisateur anonyme
 
C'est la syntaxe de ton LIKE qui n'est pas bon.
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
En fait, c'est un arbre généalogique descendant que j'essaye de faire.
J'ai un premier individu. Je recherche ses enfants. Ensuite je recherche les enfants des enfants ........
Tous les enfants ont le même champs num_pere (puisqu'ils ont le même père).

J'ai écrit
$row1['num_indiv'] = $row2['num_indiv'];
pour changer d'individu quand les enfants du précédent ont été trouvés.
0
wadagobert
 
Bonjour
si tous ont le même nom, il n'y a qu'a prendre tous les enregistrements dont le nom est le meme que celui lu en premier= nom1père
puis lire enregistrement suivant en bouclant jusqu'à ce que nom différent de nom1père
il faut alors faire nom1père=nom (qu'on vient de trouver)
et boucler en reprenant tous les enregistrements qui ont nom1pere = nom
et cela jusqu'a la fin de fichier.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Dans ce cas, il n'y aura pas de classement de descendance .......... père-enfant !
Tout sera mélangé !
0
wadagobert
 
Resalut
Entièrement d'accord!!
mais dans tes enregistrements tu ne donnes aucun champ qui differencie le pere du fils !! il manque un indicateur de filiation ???
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Dans chaque enregistrement, j'ai le num_pere (soit le numéro du père qui correspond au num_indiv d'un enregistrement).
Et en effet, je n'ai que cela ! Faut faire avec ........... :)
0
wadagobert
 
re.....
Si on ne peut différencier le père du fils, tu ne peux avoir qu'un groupe ayant le même nom sans savoir qui est le fils de qui..
quelle est la différence entre id et num-ind ??
peut-etre que la réponse est là
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Il n'y a aucun lien entre l'id et le num_indiv.
Donc, d'aprèe toi, il n'est pas possible de faire ce que je veux avec uniquement le numéro du père dans l'enregistrement.
Faudrait que je rajoute le numéro du ou des enfants dans chaque enregistrement !
Mais est-il possible de créer un petit script qui mette la base à jour ?
0
wadagobert
 
juste une question : quel est le lien entre num-ind et num-pere?
cela ne veut-il pas dire
la personne qui a comme matricule "num-ind" a un pere qui a comme matricule
"num-pere"
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
num_pere est un champs qui n'est pas obligatoirement renseigné.
Pour la personne qui a un champs num_pere renseigné, on retrouve son père avec un champs num_indiv égal à num_père (champs de son fils).
0