通过数据比较加入3个MySQL表

时间:2013-03-07 15:58:53

标签: mysql join inner-join

我目前在我的数据库中有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

非常感谢您提供的任何帮助。

2 个答案:

答案 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';