Lister, trier les noms selon des lieux

Résolu/Fermé
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 7 févr. 2012 à 12:16
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 8 févr. 2012 à 10:10
Bonjour,

J'ai une table lieux où sont répertoriés tous les lieux possibles.
J'ai une table individu où l'on trouve les champs noms, famille, lieu_naissance, lieu_dc, lieu_mariage.

Je veux afficher un lieu, suivit des noms attenant à ce lieu selon l'appartenace à la famille.

Admettons que j'ai une famille TOTO. Je veux afficher par lieu tous les noms qui si reportent (naissance, mariage ou dc).

$query="SELECT lieu FROM lieux GROUP BY lieu";
$result = mysql_query($query,$link) or exit ('Erreur : '.mysql_error() ); 

while ($row = mysql_fetch_array($result)) 
{
echo '<p>'.$row['lieu'].'<br>';

$query2='SELECT nom FROM individus WHERE famille LIKE "%TOTO%" AND ("'.$row['lieu'].'" LIKE lieu_naissance OR "'.$row['lieu'].'" LIKE lieu_dc OR "'.$row['lieu'].'" LIKE lieu_mariage_1 OR "'.$row['lieu'].'" LIKE lieu_mariage_2 OR "'.$row['lieu'].'" LIKE lieu_mariage_3) GROUP BY nom';
$result2 = mysql_query($query2,$link) or exit ('Erreur : '.mysql_error() ); 

	while ($row2 = mysql_fetch_array($result2)) 
	{	
	echo ' '.$row2['nom'].' - ';
	}

}


Le problème, c'est que j'affiche TOUS les lieux, et pas seulement ceux qui ont un rapport avec la famille TOTO !
Ceci est dû, je pense, à mon echo '<p>'.$row['lieu'].'<br>'; mais je ne sais pas comment faire .....

Merci pour votre aide
A voir également:

3 réponses

AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
7 févr. 2012 à 16:56
Bonjour,
Je ne saurais pas t'aider précisément, mais je pense qu'il faut que tu cherches vers la commande sql INNER JOIN (au lieu de faire deux boucles)
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
7 févr. 2012 à 17:15
J'y avais pensé, mais je ne sais pas du tout comment faire avec mes tables, puisque la table individus comporte les lieux éparpillés sur plusieurs colonne, et la table lieux regroupe tous les lieux ........ !
:-(
0
AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
7 févr. 2012 à 17:19
Tu peux faire un INNER JOIN table ON (val1 = val2 OR val3=val4) il me semble
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
7 févr. 2012 à 17:35
Si je fais :
while ($row = mysql_fetch_array($result)) 
{
$query2='SELECT * FROM individus WHERE famille LIKE "%TOTO%" AND ("'.$row['lieu'].'" LIKE lieu_naissance
									  OR "'.$row['lieu'].'" LIKE lieu_dc
									  OR "'.$row['lieu'].'" LIKE lieu_mariage_1
									  OR "'.$row['lieu'].'" LIKE lieu_mariage_2
									  OR "'.$row['lieu'].'" LIKE lieu_mariage_3) GROUP BY nom';
$result2 = mysql_query($query2,$link) or exit ('Erreur : '.mysql_error() );

	while ($row2 = mysql_fetch_array($result2))
	{
	echo '<p>'.$row['lieu'].'<br>';	
	echo ' '.$row2['nom'].' - ';
	}	
}

Il faut dans ma deuxième boucle que je teste à chaque fois $row['lieu']. Si la valeur de $row['lieu'] ne change pas, je continue à afficher $row2['nom']. Mais si elle change, j'affiche de nouveau $row['lieu'].
Comment faire ça ???? Je m'emmêle les pinceaux ........... :(
0
AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
7 févr. 2012 à 19:38
C'est un autre problème.

// Tu fais une variable qui va te permettre de mémoriser la valeur juste avant
$old_valeur = "";

while ($row2 = mysql_fetch_array($result2))
{
if($row['lieu'] != $old_valeur)
{
echo '<p>'.$row['lieu'].'<br>';
echo ' '.$row2['nom'].' - ';
// On change la variable
$old_valeur = $row['lieu'];
}
}

Bon après, je ne suis pas sûr d'avoir tout saisi ce que tu voulais faire au final, donc tu adaptes le if au besoin (et mettre un else)
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
8 févr. 2012 à 10:10
Effectivement ! C'était si simple .................. ;o)
Merci beaucoup AssassinTourist !!!!
0