我正在尝试使用相同的表数据设置双向多对多关系,即User,我还有一个名为Userusers的链接表,它将一个用户与另一个用户连接起来,但我不知道如何处理双向,因为我的代码的结果只显示一个方向。
--Table User:
create table User (
UserID int auto_increment not null,
UserFirstName varchar(30) not null,
UserSurname varchar(30) not null,
UserTel char(10),
UserCell char(10),
UserEmail varchar(50) not null,
UserPassword varchar(50) not null,
UserImage varchar(50),
UserAddress1 varchar(50),
UserAddress2 varchar(50),
UserTown/City varchar(50),
UserProvince varchar(50),
UserCountry varchar(50),
UserPostalCode varchar(50),
Primary key(UserID)
)
--Table Userusers:
create table UserUsers (
UserID int not null,
FriendID int not null,
primary key(UserID, FriendID),
foreign key(UserID) references User(UserID),
foreign key(FriendID) references User(UserID)
)
PHP代码:
$sql="SELECT * FROM User u INNER JOIN UserUsers uu ON uu.UserID = u.UserID INNER JOIN User f ON f.UserID = uu.FriendID WHERE uu.UserID = " . $_SESSION['userID'];
答案 0 :(得分:1)
实际上,不,你的表确实显示双向关系。
考虑你的桌面UsersUsers
列userID表示FRIENDS WITH friendID的人。
假设用户1想要成为用户2的朋友
我们的UsersUsers表格如下:
UserID | FriendID
1 2
当然,我们看到用户1和2之间现在存在关系,但我们也看到User1启动了友谊,显示了从1到1的方向。 2
现在,当User2想要接受友谊时,我们可以在表格中插入另一条记录,使其成为:
UserID | FriendID
1 2
2 1
肯定有一些更好的元数据可以添加到关系表中,以便更多地了解所创建的关系,但UserID字段应该被视为owner
或sender
,而FriendID应该是考虑了receiver
。
所以 - 你已经完成了大部分工作,现在你所要做的就是创建你的查询以对这种双向关系采取行动。
为User1获取所有已确认的朋友:
我们假设$ the_logged_in_user_id = 1
SELECT * from Users U JOIN UsersUsers F ON U.UserID = F.UserID WHERE F.FriendID = '$the_logged_in_user_id'
这将显示$the_logged_in_user_id
所有已确认的友谊,假设这是您的目的。