Boucle while

Fermé
t671 Messages postés 1453 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 13 novembre 2024 - Modifié par t671 le 15/09/2012 à 18:12
t671 Messages postés 1453 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 13 novembre 2024 - 16 sept. 2012 à 17:27
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

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
16 sept. 2012 à 04:06
C'est la syntaxe de ton LIKE qui n'est pas bon.
0
t671 Messages postés 1453 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 13 novembre 2024 11
16 sept. 2012 à 10:12
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
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 1453 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 13 novembre 2024 11
16 sept. 2012 à 10:52
Dans ce cas, il n'y aura pas de classement de descendance .......... père-enfant !
Tout sera mélangé !
0
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 1453 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 13 novembre 2024 11
16 sept. 2012 à 11:05
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
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 1453 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 13 novembre 2024 11
16 sept. 2012 à 11:20
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
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 1453 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 13 novembre 2024 11
16 sept. 2012 à 17:27
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