Membres est une table de personnes qui sont membres d'un club. Différents détails de chaque membre sont inclus dans ce tableau à travers différentes colonnes telles que ID, nom, adresse, email, etc.
Désormais, deux membres quelconques de cette table peuvent avoir une relation. Par exemple, si A, B, C et D sont tous membres de cette table, alors A et B peuvent avoir une relation; A peut C avoir une relation; B et D peuvent avoir des relations, etc. Ainsi, alors que le membre A peut avoir une relation avec tous les autres membres (tels que B, C et D, etc.), il peut avoir une relation avec n'importe quel autre membre, dans les deux cas, c'est-à-dire qu'il peut s'agir de AB ou BA. Pour cette relation, une nouvelle table Relations a été créée. Cela n'a que 3 colonnes; à savoir, ID, FirstMemberID, SecondMemberID. Ici, FirstMemberID et SecondMemberID sont fondamentalement les ID respectifs des membres (dans une relation) de la table Members.
Maintenant, je veux construire une requête SQL (pour MySQL) pour sélectionner tous les détails (toutes les colonnes) de la table Members pour tous les membres qui ont une relation avec une personne avec l'ID XYZ de telle manière que XYZ soit la première partie de cette relation. Ici, XYZ n'est que l'identifiant de la personne et non son nom. Donc, je peux cette première requête:
SELECT SecondMemberID FROM Relations WHERE FirstMemberID = XYZ;
Cette requête donne des résultats multiples car XYZ a des relations avec de nombreux membres. L'autre instruction select est comme ceci:
SELECT * FROM Membres WHERE ID = SecondMemberID;
[Note: Ici, SecondMemberID est ce qui est renvoyé par la première requête. Mais, comme je l'ai dit, il peut y avoir plusieurs SecondMemberID ici.]
Mon problème est de savoir comment combiner les deux requêtes de manière à obtenir des résultats corrects.
J'ai essayé diverses méthodes, comme traiter les résultats de la première requête comme un tableau, puis utiliser l'opérateur IN dans la deuxième requête en utilisant la méthode implode de PHP ou autre. J'ai également essayé diverses instructions JOIN mais sans succès.
Que me manque-t-il? Pouvez-vous s'il vous plaît aider?
3 Réponses :
Essayez
SELECT Members.*
FROM Relations LEFT JOIN Members
ON (Relations.SecondMemberID=Members.ID)
WHERE Relations.FirstMemberID = XYZ;
Je pense que vous voulez:
SELECT SecondMemberID
FROM Relations
WHERE Id IN (SELECT SecondMemberID
FROM Members
WHERE FirstMemberID = 'XYZ');
La sous-requête n'est pas nécessaire Et vous faites référence à une mauvaise table dans la partie extérieure.
Merci. Je voulais un résultat légèrement différent, donc j'ai changé selon votre suggestion: SELECT * FROM Members WHERE Id IN (SELECT SecondMemberID FROM Relations WHERE FirstMemberID = 'XYZ') ;. Cette requête selon votre suggestion fonctionne correctement lorsqu'elle est utilisée dans phpMyAdmin, mais elle ne donne pas de résultat dans mon code php. Donc, je pense que c'est un autre problème que j'essaie de résoudre. Merci encore.
Maintenant, cette requête (aussi légèrement modifiée comme mentionné dans mon commentaire précédent) fonctionne également dans mon code php. Merci beaucoup. Désolé, mon vote n'est pas reflété même si j'ai voté pour, car ma réputation d'utilisateur est inférieure à 15, en tant que nouvel utilisateur.
Vous avez besoin d'une simple commande JOIN en SQL. JOIN joint deux tables. INNER JOIN les rejoint sur une condition spécifique, c'est-à-dire concatène deux lignes (une de chaque table) qui correspondent à la condition. La condition est généralement quelque chose comme: table1.field1 == table2.field2 ou vous pouvez utiliser LEFT ou RIGHT JOIN qui, à son tour, joindra deux lignes mais celle de droite ou de gauche peut être vide. p>