我目前在我的数据库中有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具有以下设置。
非常感谢您提供的任何帮助。
答案 0 :(得分: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;
答案 1 :(得分: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';