1

ソーシャルネットワークサイトの場合、招待者と招待者のIDと、招待のステータス(承認済みかどうか)を示すテーブルがあります。私が読んだことによると、これは友達のテーブルのベストプラクティスのようです。

テーブルの友達

id | inviterid |inviteeid |status

ただし、特定のユーザーIDについて、名前を含むその人のすべての「友達」を表示したいと思います。簡単なクエリで関係のレコードのリストを取得できます

Select * from friends WHERE inviterid = '33' or inviteeid = '33'"

ただし、友達は招待者または招待者のいずれかである可能性があるため、これは簡単に友達のリストに変換されません。そのため、誰が誰を招待したかによってフィールドが異なります。

友達のテーブルのためのより良いテーブルデザインはありますか?または、招待者と招待者のどちらかになり得る友人を選択するSQL構文はありますか。最終的には、ユーザー名を持つ別のテーブルに結合する必要があります。

4

3 に答える 3

0

以下の列を持つユーザーテーブルがあります

userId|name|...

そしてあなたの友達のテーブル

id | inviterid |inviteeid |status

このユーザーがテーマを招待したユーザーの友達を見つけたい場合は、以下のクエリを使用できます!

select id, status from friend_tbl inner join user_tbl on user_tbl.id=friend_tbl.inviterid;

または、このユーザーの友人を招待したい場合は、次のクエリを使用できます。

select id, status from friend_tbl inner join user_tbl on user_tbl.id=friend_tbl.inviteeid;

これらがあなたのお役に立ち、あなたの目的を理解できることを願っています!

于 2012-08-02T01:35:24.140 に答える
0

ユニオンを使用して 2 種類のフレンドをまとめてから、結果をユーザー名テーブルと結合できます。

Select inviterid as friend_id, status from friends where inviteeid = 33
Union
Select inviteeid as friend_id, status from friends where inviterid =33
于 2012-08-02T01:37:29.527 に答える
0

個人的には、この場合、フレンド テーブルと招待テーブルの 2 つのテーブルを用意したいと思います。

フレンドテーブル

id | userid | friendid

したがって、友達を選択するには

SELECT friendid FROM friend_table WHERE userid = 33

招待テーブル

id | inviterid | inviteeid | status

ユーザーが承認したら招待テーブルのステータスを変更し、フレンドテーブルに新しい行を挿入します

UPDATE invite_table SET status = 'accepted' WHERE inviterid = 33
INSERT INTO friend_table (`userid`, `friendid`) VALUES (33, $friendid)
于 2012-08-02T01:50:22.900 に答える