加入3 MySQL表与数据比较
问题描述:
我有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
任何帮助你可以给予将不胜感激。
答
表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;
答
给这个一展身手:
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';
的敌人表用于从“邀请好友”用户阻止其他用户,它由不同页面上的另一个查询回升。我只是想保持表格的数量。 – AlbrightK 2013-03-07 17:20:14
您不必关心表格数量。你必须首先关心正确的数据结构。 – Ghigo 2013-03-07 17:24:03
编辑:这完美的作品,只是不得不改变我的分贝,以便它会使用用户名,而不是用户名,完美! 谢谢:) – AlbrightK 2013-03-07 17:36:56