如何处理与PHP的双向多对多关系

时间:2013-02-21 06:57:23

标签: php mysql

我正在尝试使用相同的表数据设置双向多对多关系,即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'];

1 个答案:

答案 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字段应该被视为ownersender,而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所有已确认的友谊,假设这是您的目的。