SELECT et GROUP BY selon plusieurs colonnes

[Résolu/Fermé]
Signaler
Messages postés
1306
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
3 mai 2021
-
Messages postés
1306
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
3 mai 2021
-
Bonjour,

Dans ma base, j'ai une colonne avec des noms, et une avec des lieux de naissance, et une avec des lieux de décès, et une avec des lieux de mariage.
Je voudrais afficher une liste qui comporte un lieu (naissance et/ou décès et/iou mariage) et les noms qui s'y rattachent.

Soit :
LILLE
Arthur - Benoit - Claude
PARIS
Bernard - Bertrand
STRASBOURG
Pascal .........

Pourriez m'aider, car je me mélange les pinceaux......
Merci
A voir également:

6 réponses

Messages postés
11910
Date d'inscription
mardi 24 mai 2011
Statut
Contributeur
Dernière intervention
12 juin 2018
2 553
Tout est dans une seule table ?
Messages postés
1306
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
3 mai 2021
10
Oui, tout est dans la même table !!!!!
Messages postés
1682
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
304
un simple select nom from table group by ville devrait suffire non ?
Messages postés
1306
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
3 mai 2021
10
J'ai fait ça, mais je n'arrive pas à afficher les lieux :

$query = 'SELECT nom,lieu_naissance, lieu_dc, lieu_mariage FROM individus GROUP BY lieu_naissance,lieu_dc, lieu_mariage,nom'; 
$result = mysql_query($query) or die(mysql_error());

while ($row = mysql_fetch_array($result)) 
{
echo ''.$row['nom'].'<br>';
}
Messages postés
1682
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
304
peut être en rajoutant $row['lieu_naissance'] etc... dans ta boucle ? ^^'

et enlève le nom du group by (et peut être d'autre lieu, parce que c'est un peu brouillon je trouve)
en tout cas chaque type de lieu devrais avoir sa propre liste comme par exemple:
naissance:
paris
bernard

mariage:
paris
bernard
grenoble
alain

décès

etc...
Messages postés
11910
Date d'inscription
mardi 24 mai 2011
Statut
Contributeur
Dernière intervention
12 juin 2018
2 553
Je pense que ce serait + simple si la table était structurée de la sorte:

nom, lieu, evenement
Messages postés
1682
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
304
ou même plusieurs tables pour faire un truc propre ^^
une table pour les personnes, une pour les lieux, une pour les évènements et qui comporterais une clé étrangère des deux autres tables
Messages postés
1306
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
3 mai 2021
10
J'ai créer une table "lieux", qui ne comporte id + lieu, où j'ai répertorié tous les lieux.
Maintenant, je veux afficher mon idée de départ, soit :

LILLE
Arthur - Benoit - Claude
PARIS
Bernard - Bertrand
STRASBOURG
Pascal .........

C'est à dire prendre un enregistrement de la table lieux, l'afficher, le comparer aux champs lieu_naissance, lieu_dc et lieu_mariage de la table individus et récupérer les champs nom trouver pour les afficher.
Messages postés
11910
Date d'inscription
mardi 24 mai 2011
Statut
Contributeur
Dernière intervention
12 juin 2018
2 553
Bon structurons :-)

Tu as donc deux tables de ce genre:
Personnes[ID_Personne;Nom;ID_lieu] et Lieux[ID_lieu; type_lieu]

Dans "Personnes", ID_lieu est la clé de Lieux.

Commençons simplement tes ID_lieu sont du texte et ce sont les noms des endroits. Les type_lieu sont les mariages, décès, naissance.

Ta requête sera donc: SELECT Nom, ID_Lieu FROM Personnes, Lieux WHERE Personnes.ID_lieu = Lieux.ID_Lieu GROUP BY ID_Lieu
Messages postés
1306
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
3 mai 2021
10
Non, avec deux tables ça ne va pas fonctionner ......
Car j'ai ma première table "individus" qui comporte ID, nom, lieu_naissance, lieu_dc, lieu_mariage ......... Et ma deuxième table "lieux" qui comporte ID et lieux (où tous les lieux possibles sont répertoriés.
Mais je ne vois pas comment faire un JOIN, à part sur le nom du lieu. Mais dans la première table, le lieu ne peut être présent que pour la naissance, le décès, le mariage. Ou pour les trois ..................

En fait, il faudrait prendre un lieu dans la table "lieux", et récupérer tous les noms qui comporte ce lieu dans lieu_naissance, lieu_dc et/ou lieu_mariage.

Et là je coince .............. ;o)
Messages postés
1306
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
3 mai 2021
10
Me revoici, et voilà où j'en suis. Pour rappeller, j'ai une table « lieux » qui comporte une liste de différents lieux.
J'ai une table « individus » qui comporte des noms et des lieux. L'enregistrement d'un individu peut avoir plusieurs lieux selon que ce soit lieu_naissance, lieu_dc ou lieu_mariage. Tous les différents styles de lieux de la table individus sont listés dans la table lieux.
Je veux afficher une liste avec un lieux et tous les noms qui s'y rapportent :

PARIS
Arthur - Benoit - Bertrand - Durand
STRASBOURG
Didier - Denis - Georges
LILLE
Michel - .............

$query="SELECT * FROM lieux";
$result = mysql_query($query,$link) or exit ('Erreur : '.mysql_error() ); 
$row = mysql_fetch_array($result);

$query2="SELECT * FROM individus";
$result2 = mysql_query($query2,$link) or exit ('Erreur : '.mysql_error() ); 
$row2 = mysql_fetch_array($result2);

while ($row = mysql_fetch_array($result)) 
{
echo ''.$row['lieu'].'<br>';
	if ((($row2['lieu_naissance']) == ($row['lieu'])) OR 
	   (($row2['lieu_dc']) == ($row['lieu'])) OR 
	   (($row2['lieu_mariage_1']) == ($row['lieu'])) OR 
	   (($row2['lieu_mariage_2']) == ($row['lieu'])) OR 
	   (($row2['lieu_mariage_3']) == ($row['lieu'])))
	{
	echo ''.$row2['nom'].' - ';
	}
}


Mais là, je ne liste que les lieux, avec le 1° individu (id=1) noyé dans la liste obtenue.

Comment faire ?
Merci