2013-03-07 105 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';