0

我的数据库中目前有 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”可以查看他/她的“朋友”列表中的用户上传的文件,自然会有一个页面可以查看所有上传的文件,但这更多是针对看到您更欣赏的人的上传。

本质上,我试图让查询读取;Table1 中的“用户名”、Table2 中的“UploadeBy”和 Table3 中的所有内容

示例:GuestUse 登录,查询获取此信息并将他的用户名与表 3 进行比较,然后仅显示来自他的朋友列表中的人在表 2 中的上传。

对于结构,数据库具有以下设置。

  • 唯一 ID 和字段 ID 均为 INT(4)
  • 用户名是 VARCHAR(42)
  • 密码是 VARCHAR(30)
  • 活动是 VARCHAR(8)
  • ListOwner 是 VARCHAR(42) < 与用户名相同
  • 朋友和敌人是文本

您可以提供的任何帮助将不胜感激。

4

2 回答 2

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 文件?想想那个。同时,foes 表是无用的。

现在,选择朋友的所有文件:

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;
于 2013-03-07T16:36:21.250 回答
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';
于 2013-03-07T16:36:33.840 回答