2010-03-10 10 views
0

J'ai une base de données deux tables et une table de liaison que je besoin d'une requête de jointure pour:plusieurs à plusieurs avec des jointures

Voici mes tableaux:

famille (userid (int), LOGINNAME, etc.)
membre (memberid (int), lOGINNAME (ce lien membre à une famille), nom, etc.)

Linking Tableau: user2member (userid, memberid) ... seraient toutes deux clés étrangères?

Je veux faire deux choses:

1) Être capable d'avoir une family.loginName (12, Johnson) abonnez-vous à un autre family.loginName (43, Smith) et enregistrer que dans la table de liaison.

Cela ressemblerait à ceci: 12,43

2) Quand je fais une requête pour tous les member.name qui se trouvent dans la famille Johnson, je vais obtenir tous les Johnsons & tous les Smiths.

Si Johnson = Ted, Sue & Patty IF Smith = Joe, Sue & Bob

mes résultats de la requête seraient Johnson maintenant = Ted, Sue, Patty, Joe, Sue, Bob

j'ai demandé cette question il y a quelques jours sans bons noms de table et je fini par me confondre et le gars gentil Ollie Jones qui a posté une réponse similaire à celle de la requête:

SELECT member.name 
FROM family 
    JOIN user2member on family.userid = member.memberid 
    JOIN member on user2member.name = member.name 
 WHERE family.userid = '30' 
ORDER BY member.name 

je devais changer les ans de Ollie Wer pour correspondre à mes tables, mais je reçois une erreur de limite 0,30 sur la ligne 5.

C'est la première fois que je fais JOINS et je n'ai aucune idée si c'est correct.

Merci,

Voici le lien à ma première question: mySQL table linking , group linked to other members lists, the displaying all members

Répondre

1

Je ne sais pas, si les tables vous est suggéré de résoudre votre problème. Si je comprends bien votre question correcte, il y a deux relations:

  • une relation pour tous les membres de la famille (Johnson avec Ted, Sue, Patty, Smith avec Joe, Sue, Bob)
  • une relation pour les abonnements (un la famille peut souscrire à une autre famille)

Je suggère tableaux suivants:

  • famille (F_ID, f_loginName, etc.)
  • membre (m_id, m_f_id, m_name) (clé étrangère à la famille, beaucoup à une relation)
  • abonnement (s_f_id, s_to_f_id) (liaison est basée sur les deux clés de la famille)

Cette entraînerait contenu suivant:

family: 
f_id f_loginName 
12  Johnson 
43  Smith 

member: 
m_id m_f_id m_name 
1  12  Ted 
2  12  Sue 
3  12  Patty 
4  43  Joe 
5  43  Sue 
6  43  Bob 

subscription 
s_f_id s_to_f_id 
12  43 

maintenant, pour obtenir tous les membres possibles pour une famille spécifique et il est des abonnements, j'utiliser requête SQL suivante. Il a une simple jointure pour la famille et les membres de sa famille. Dans la clause WHERE, la famille Johnson est récupérée (f_id = 12) et pour obtenir tous les membres de la famille à partir des abonnements, il est plus facile d'utiliser une sous-requête.

SELECT f_loginName, m_name 
FROM family 
INNER JOIN member ON m_f_id = f_id 
WHERE f_id = 12 
     OR f_id IN (SELECT s_to_f_id FROM subscription WHERE s_f_id = 12) 
ORDER BY f_loginName, m_name; 
+0

Merci, A lto à saisir. Question sur les clés étrangères. Est-ce que member (m_f_id) est une clé étrangère à Family (f_id) ou vice versa? et les abonnements sont les clés primaires et étrangères à f_id et m_id? Merci beaucoup. –

+0

Merci - J'avais du mal avec ça, il y a une seule clé étrangère, m_f_id qui lie à f_id. –

+0

oui, le m_f_id est une clé étrangère à f_id et met un membre dans une famille. Dans ce cas, un membre peut rester dans une famille. Y a-t-il un besoin, qu'un membre puisse être dans plus d'une famille? Ce que je ne comprends pas vraiment dans votre question 1) est: quel problème voulez-vous résoudre en souscrivant une famille à une autre? – Steve

Questions connexes