1

同じテーブルデータ、つまり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'];
4

1 に答える 1

1

実際には、いいえ、テーブルは双方向の関係を示しています。

テーブルUsersUsersを検討してください

列userIDは、FRIENDSWITHfriendIDである人を表します。

ユーザー1がユーザー2と友達になりたいとしましょう

UsersUsersテーブルは次のようになります。

UserID   |   FriendID
  1              2

確かに、ユーザー1とユーザー2の間に関係があることがわかりますが、ユーザー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これがあなたが望んでいることであると仮定すると、それはの確認されたすべての友情を示します。

于 2013-02-21T08:12:21.003 に答える