2011-10-18 3 views
0

私は新しく、これをどのように構造化するかについて非常に混乱しているので、これについてコメントしてください。 興味のある人のデータベースを作成したいと思います。私は彼らの興味を記録し、共通の関心を持っているものを見て、それらを表示したい。複数のジャンクションテーブル、データベース構造の初心者

私は3つのテーブルがあります:人、インタレスト、InterestType

人が人 関心の表では、人が持つことができるの関心です。 InterestTypeは、スキーまたはサイクリングのような興味のある名前です。

を(私はすべての人が利益の共通タイプセットを使用したいので、私はそれを離れている)私のセットアップは以下の通りです:

personTable:ID、名前、interestID

interestTable:ID、interestType、PERSONID

interestType:id、名前

同じ関心のある人のリストを取得するにはどうすればよいですか?

+0

personTableに「interestID」があるのはなぜですか?また、興味のあるテーブルにIdの本当の必要はありません... –

答えて

1

私はAccessで簡単なモデルを作ってきたが、あなたはあまりにも多くの問題もなく、SQLiteのにこれを「翻訳」することができるはずです。

は考える:

SELECT interestType.Name, personTable.Name 
FROM personTable INNER JOIN 
(interestType INNER JOIN interestTable ON 
interestType.interestId=interestTable.interestId) 
ON personTable.personId=interestTable.personId 
ORDER BY 1, 2; 

が返されます:あなたがしたい場合

interestType.Name personTable.Name 
Calligraphy   Angelo 
Calligraphy   John 
Calligraphy   Paolo 
Chess     Carla 
Chess     Paolo 
Karate     Angelo 
Karate     Carla 
Karate     Paolo 
Movies     Carla 

利息の名前で、その後、人名でソート

PersonTable 
personId Name 
1   Paolo 
2   Carla 
3   Angelo 
4   Franco 
5   John 
6   Lisa 

InterestType 
interestId Name 
1   Calligraphy 
2   Karate 
3   Chess 
4   Movies 
5   Hiking 

InterestTable 
interestId personId 
1    1 
2    1 
3    1 
2    2 
3    2 
4    2 
1    3 
2    3 
1    5 

簡単なクエリはトリックを行う必要があります特定の関心事を探すには、where句を追加してください:

SELECT interestType.Name, personTable.Name 
FROM personTable INNER JOIN 
(interestType INNER JOIN interestTable ON interestType.interestId=interestTable.interestId) 
ON personTable.personId=interestTable.personId 
WHERE interestType.Name="Karate" 
ORDER BY 1, 2; 


interestType.Name personTable.Name 
Karate     Angelo 
Karate     Carla 
Karate     Paolo 
+0

Grazie(Sei Italiano?) 私はSQLiteを使用していますが、この問題は再現できません。 –

+0

Sì、sono Italiano。それはあなたが「受け入れる」ことができるようになりました(「あなたの声」は「受け入れられました」)。 –

+0

Perfetto。私はinterestTypeテーブルの使用を再考しています。興味名のDISTINCTリストを要求することはできませんか? ご返信ありがとうございます。 –

0

ことは、これを試してみてください。..

SELECT * FROM personTable pt 
INNER JOIN interestTable it 
    ON pt.id = it.id 
WHERE it.interestType = "theInterestType"; 
+0

私はそれをテストします。 interestTypeテーブルを持っている必要がありますか? InterestType列の代わりに名前列を使用すると、固有の関心名でグループ化する方法はありませんか? –

+0

ああ、今、私はあなたが "Distinct"の質問で何を意味していたかを見ています。私はこれがいいアイデアだとは思わない...他のところで述べたように、interestTypeは参照として機能するはずです。 「空手」と入力する代わりに、ユーザーは選択肢リストから選択することができ、選択肢リストはinterestType表の「名前」フィールドから入力されます。したがって、要するに、重複、誤字、および同じ概念(興味)の別のバージョンを避けるために、それを使用してください。そうしないと、あなたのアプリを管理している人は「間違った」エントリを修正するのに何時間も費やします。 –

+0

@Sam Casilご意見ありがとうございます。それは正しかった。私は私のニーズに合わせてそれを少し修正しなければならなかった。いいアドバイス!! –

関連する問題