Problème de jointure dans une requête: JOIN ou table temporaire?
Résolu/Fermé
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
-
26 févr. 2013 à 14:44
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 - 5 mars 2013 à 10:24
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 - 5 mars 2013 à 10:24
A voir également:
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de pomme mais pas de pomme de terre ? pix
- Impossible de supprimer une page word - Guide
- Google moteur de recherche page d'accueil - Guide
- Word numéro de page 1/2 - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Le fichier pdf à télécharger est disponible avec le même nom sur le site de bell canada. mais vous ne le trouverez pas directement avec un moteur de recherche… quelle est l’url de ce fichier pdf sur le site web de bell canada ? - Forum PDF
5 réponses
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
Modifié par arth le 27/02/2013 à 01:34
Modifié par arth le 27/02/2013 à 01:34
Ne serait-il pas préférable de tout centrer sur la table MARIAGE et non la table PERSONNES à ce moment là?
Pour moi cela devrait se présenter ainsi :
La table mariage contient 1 seul ID, celui du mariage, et eventuellement plusieurs autre champs, comme la date du mariage, un éventuel nom à ce mariage type générique mariage de M. XY et Mme YY
TableMariage
IDMariage
Après s'il s'agit de mariage, epoux et epouses devraient à mon sens être dans une table séparée
TableEpoux :
IDMariage ==> ID du mariage
NomEpoux
PrenomEpoux
TableEpouse :
IDMariage ==> ID du mariage
NomEpouse
NomJeuneFille(si nécessaire)
PrenomEpouse
Pour sélectionner le nom des personnes en fonction de l'ID du mariage, cela devrait donner :
Sinon pour un classement plus global trié par ordre alphabétique :
Le loup, solitaire et mystérieux.
Pour moi cela devrait se présenter ainsi :
La table mariage contient 1 seul ID, celui du mariage, et eventuellement plusieurs autre champs, comme la date du mariage, un éventuel nom à ce mariage type générique mariage de M. XY et Mme YY
TableMariage
IDMariage
Après s'il s'agit de mariage, epoux et epouses devraient à mon sens être dans une table séparée
TableEpoux :
IDMariage ==> ID du mariage
NomEpoux
PrenomEpoux
TableEpouse :
IDMariage ==> ID du mariage
NomEpouse
NomJeuneFille(si nécessaire)
PrenomEpouse
Pour sélectionner le nom des personnes en fonction de l'ID du mariage, cela devrait donner :
SELECT H.NomEpoux,H.PrenomEpoux,F.NomEpouse,F.PrenomEpouse FROM TableMariage AS M INNER JOIN TableEpoux AS H ON H.IDMariage = M.IDMariage INNER JOIN TableEpouse AS F ON F.IDMariage = M.IDMariage WHERE M.IDMariage = '2' ; # UN ID Quelconque mais qui existe
Sinon pour un classement plus global trié par ordre alphabétique :
SELECT M.IDMariage,H.NomEpoux,H.PrenomEpoux,F.NomEpouse,F.PrenomEpouse FROM TableMariage AS M INNER JOIN TableEpoux AS H ON H.IDMariage = M.IDMariage INNER JOIN TableEpouse AS F ON F.IDMariage = M.IDMariage ORDER BY H.NomEpoux ASC;
Le loup, solitaire et mystérieux.
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
30
27 févr. 2013 à 13:07
27 févr. 2013 à 13:07
Merci de ta réponse arth, ta solution fonctionne effectivement mieux pour faire les requêtes, mais ça me semble un peu compliqué (4 tables) et surtout ça me pose deux problèmes:
1/ J'ai besoin de relier les époux/épouses à la liste des personnes de façon bien claire: la seule chose qui identifie de façon univoque une personne c'est son ID, celui de la table personnes. En effet quid des personnes qui ont les mêmes noms et prénoms? De plus j'ai une page du site qui permet de voir toutes les infos concernant une personne (dates de naissance, ses enfants, son (ses) mariage(s)...) ; si je ne mets pas les ID des époux dans la table mariage tout ceci est irrécupérable (le nom ne suffit pas à identifier une personne).
2/ Je trouve que c'est redondant et une perte de temps/ressource de devoir re-écrire le nom des époux dans la table mariage alors que toutes ces infos sont déjà dans la table des personnes.
Bref, je vais rester avec mon organisation des données, mais j'aimerais bien savoir:
1/ si on peut faire une "double jointure" sur une même table: joindre la table des personnes à la table des mariage pour récupérer le nom des époux, et joindre les même tables pour récupérer le nom des épouses.
2/ si je dois passer par une table temporaire (à l'issue de la requête que j'ai écrite ci-dessus) et refaire la même requête sur la table temporaire.
Merci de ton aide :)
1/ J'ai besoin de relier les époux/épouses à la liste des personnes de façon bien claire: la seule chose qui identifie de façon univoque une personne c'est son ID, celui de la table personnes. En effet quid des personnes qui ont les mêmes noms et prénoms? De plus j'ai une page du site qui permet de voir toutes les infos concernant une personne (dates de naissance, ses enfants, son (ses) mariage(s)...) ; si je ne mets pas les ID des époux dans la table mariage tout ceci est irrécupérable (le nom ne suffit pas à identifier une personne).
2/ Je trouve que c'est redondant et une perte de temps/ressource de devoir re-écrire le nom des époux dans la table mariage alors que toutes ces infos sont déjà dans la table des personnes.
Bref, je vais rester avec mon organisation des données, mais j'aimerais bien savoir:
1/ si on peut faire une "double jointure" sur une même table: joindre la table des personnes à la table des mariage pour récupérer le nom des époux, et joindre les même tables pour récupérer le nom des épouses.
2/ si je dois passer par une table temporaire (à l'issue de la requête que j'ai écrite ci-dessus) et refaire la même requête sur la table temporaire.
Merci de ton aide :)
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
Modifié par arth le 27/02/2013 à 14:41
Modifié par arth le 27/02/2013 à 14:41
Hmmm spa faux ! :-)
Ceci dit je n'ai pas réécrit le nom des époux dans la table mariage. Il n'y a par ailleurs que 3 tables :-)
Il y a juste l'ID du mariage qui conduit de l'autre côté dans la table PERSONNES à avoir deux personnes qui ont le même ID de mariage.
Je pense que mon point de vue est biaisé car s'il s'agit d'arbre généalogique, alors il manque des données, dont les enfants/parents des époux/épouses.
Il faut tout prendre en compte à ce moment là.
EDIT : Cela dépend aussi de quels sont les champs de recherche dans les pages du sites. Mais comme expliqué cela ne me semble pas trop compliqué
Le loup, solitaire et mystérieux.
Ceci dit je n'ai pas réécrit le nom des époux dans la table mariage. Il n'y a par ailleurs que 3 tables :-)
Il y a juste l'ID du mariage qui conduit de l'autre côté dans la table PERSONNES à avoir deux personnes qui ont le même ID de mariage.
Je pense que mon point de vue est biaisé car s'il s'agit d'arbre généalogique, alors il manque des données, dont les enfants/parents des époux/épouses.
Il faut tout prendre en compte à ce moment là.
EDIT : Cela dépend aussi de quels sont les champs de recherche dans les pages du sites. Mais comme expliqué cela ne me semble pas trop compliqué
Le loup, solitaire et mystérieux.
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
30
28 févr. 2013 à 10:17
28 févr. 2013 à 10:17
Jeje merci encore :) Mais ça fait des années que je suis là dessus, et je suis sur le point de finir... :D et je dois avouer que je ne vais pas réorganiser mes tables maintenant, et puis j'y ai beaucoup réfléchi et c'est cette façon de faire qui me convient le mieux.
Bon, sinon je cherche toujours une réponse à mes questions de requête... Je crois que je vais aller bucher un peu les table temporaires, car la solution magique ne semble pas exister...
A+
Bon, sinon je cherche toujours une réponse à mes questions de requête... Je crois que je vais aller bucher un peu les table temporaires, car la solution magique ne semble pas exister...
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
chantaussel
Messages postés
137
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
9 juillet 2014
30
5 mars 2013 à 10:24
5 mars 2013 à 10:24
Allez, histoire de conclure cette histoire, avec les tables temporaires ça donne:
Merci encore de votre aide :)
$requete1 = "CREATE TEMPORARY TABLE tempo(id smallint(6),nom_h varchar(50),prenom_h varchar(50),id_f smallint(6))"; $requete2 = "INSERT INTO tempo SELECT table_mariage.id, table_personnes.nom nom_h, table_personnes.prenom prenom_h, table_mariage.id_f FROM table_personnes INNER JOIN table_mariage ON table_mariage.id_h = table_personnes.id"; $requete3 = "SELECT tempo.nom_h, tempo.prenom_h, tble_personnes.nom nom_f, table_personnes.prenom prenom_f, tempo.id FROM table_personnes INNER JOIN tempo ON tempo.id_f = table_personnes.id ORDER BY nom_h, prenom_h, nom_f"; mysql_query($requete1); mysql_query($requete2); $reponse = mysql_query($requete3);
Merci encore de votre aide :)