2013-03-07 107 views
0

我有3個MySQL表目前在我的數據庫中,我試圖找出如何將它們連接在一起並比較它們之間的數據。加入3 MySQL表與數據比較

這些查詢構成了我目前在業餘時間作爲一個副項目工作的「朋友或敵人」系統的一部分,但我無法爲我的生活解決這個問題。我已經成功地管理了一個2表連接,但是沒有3表連接。

無論如何,這裏是表格佈局。

表1

Unique ID | Username | Password | Activity 
1   | SomeUser | password | Active 
2   | NewUsers | password | InActive 
3   | GuestUse | password | Active 

表2

FileID | UploadedBy | Type | FileName | Description 
1   | SomeUser | MP3 | Demo.mp3 | Bass Guitar Riff 
2   | SomeUser | MP4 | Demo.mp4 | Some Youtube Video 

表3

ListOwner | Friends | Foes 
SomeUser | GuestUse | NULL 
GuestUse | SomeUser | NULL 

所有我想要實現的是, 「ListOwner」 可以查看用戶上傳的文件誰是他/她的「朋友」列表中,自然會有一個頁面,您可以查看上傳的所有文件,但這是更專注於看到你更喜歡上傳的人。

實質上,我試圖讓查詢讀取; 「用戶名」,從表1,從表2「UploadeBy」和一切從表3

例子: GuestUse登錄,查詢從那些誰需要這些信息,他的用戶名與表3進行比較,然後只顯示上傳表2中在他的朋友列表中。

對於結構DB有以下設置。

  • 唯一ID &字段ID都INT(4)
  • 用戶名是VARCHAR(42)
  • 口令VARCHAR(30)
  • 活性是VARCHAR(8)
  • ListOwner是VARCHAR (42)<同用戶名
  • 好友&的敵人是TEXT

任何幫助你可以給予將不勝感激。

回答

0

表2字段「uploadedby」應該是數字用戶ID。

FileID | UploadedBy | Type | FileName | Description 
1   | 1   | MP3 | Demo.mp3 | Bass Guitar Riff 
2   | 1   | MP4 | Demo.mp4 | Some Youtube Video 

您應該爲「朋友」關係和「敵人」關係創建一個表。

Table 3: friends 
ListOwnerId | FriendId 
1   | 2 
1   | 3 
2   | 1 

Table 4: foes 
ListOwnerId | FoeId 
3   | 2 

然後繼續查詢從內到外。

SELECT friendid FROM friends WHERE listowner=$loginid; 

這將提取$ loginid用戶的所有朋友。

如果$ someuseris在$ loginid好友列表中,但是$ someuserid將$ loginid設爲敵人,那麼$ loginid請參閱$ someuserid文件?想想那個。與此同時,敵人表是毫無用處的。

現在,從朋友選擇所有文件:

SELECT * FROM files WHERE uploadedby IN (SELECT friendid FROM friends WHERE listowner=$loginid) 

該查詢會給你想要的文件的列表。

這是用子查詢完成的,你也可以用連接來完成。

SELECT files.* FROM files JOIN friends ON files.uploadedby=friends.friendid WHERE friends.listowner=$loginid; 
+0

的敵人表用於從「邀請好友」用戶阻止其他用戶,它由不同頁面上的另一個查詢回升。我只是想保持表格的數量。 – AlbrightK 2013-03-07 17:20:14

+0

您不必關心表格數量。你必須首先關心正確的數據結構。 – Ghigo 2013-03-07 17:24:03

+0

編輯:這完美的作品,只是不得不改變我的分貝,以便它會使用用戶名,而不是用戶名,完美! 謝謝:) – AlbrightK 2013-03-07 17:36:56

0

給這個一展身手:

select t1.Username, 
t3.ListOwner,t3.Friends,t3.Foes, 
t2.UploadedBy,t2.Type,t2.FileName,t2.Description 
from Table1 t1 
inner join Table3 t3 on t1.Username = t3.ListOwner 
inner join Table2 t2 on t3.Friends = t2.UploadedBy 
where Username = 'GuestUse';