この質問を続けて、
私のWebアプリでは、ユーザーがFacebookなどの友達を追加できるようにしたいのですが、前の質問で、@yidingが言ったようにデータベース構造を使用することにしました。
対称になるように関係を非正規化します。つまり、1と2が友達の場合、2つの行(1,2)と(2,1)があります。
欠点は、サイズが2倍になることです。友情を築いたり壊したりするときは、2回の書き込みを行う必要があります。利点は、すべての読み取りクエリが簡単になることです。ほとんどの場合、書き込みではなく読み取りを行うため、これはおそらく適切なトレードオフです。
これには、最終的に1つのデータベースを超えてユーザーシャーディングを実行することにした場合に、他のすべてのデータベースシャードをトラバースして人の友達を見つける必要がないという追加の利点があります。
したがって、ユーザー1がユーザー2を追加し、ユーザー5が2を追加すると、次のようなものがデータベースに追加されます。
ROW_ID USER_ID FRIEND_ID STATUS
1 1 2 0
2 2 1 0
3 5 2 0
4 2 5 0
ご覧のとおり、最初に「 REQUEST SENDER 」の行を挿入します。ここで、ユーザー5
がログインしていて、友情のリクエストを表示したいとします。これが私のクエリです。
$check_requests = mysql_query("SELECT * FROM friends_tbl WHERE FRIEND_ID = '5'");
上記のクエリはROW_ID=4をフェッチします。これは、上記のクエリでは、ユーザー2が5を追加したことを示していますが、実際にはユーザー5がユーザー2を追加していないことを示しているため、ここではユーザー5の友情リクエストを表示しないでください。代わりに、ユーザー2に表示する必要があります。
これを正しくチェックするにはどうすればよいですか?