0

私は現在、単純なソーシャルサイト用のデータベースを設計しようとしています。データベースにMySQLを使用しています。現在、usersテーブルしかありません。基本的には、ユーザーが友達を追加したり、友達をリストしたりできるようにしたいと思っています。次のような友達テーブルを作成することを考えています。

friends table
user_id
friend_id

そして、誰かが友達を追加するたびに、エントリが作成されます。私が正しい方向に進んでいるかどうかは正確にはわかりません。別の質問ですが、2度の友達をすべて取得する方法はありますか?(友達の友達)助けていただければ幸いです。よろしくお願いします!

4

4 に答える 4

3

はい、あなたは正しい道を進んでいます。

友達テーブルを自分自身に参加させることで、2度の友達を取得できます

select t2.friend_id
from friends t1 
     inner join friends t2 on t1.friend_id = t2.user_id
where t1.user_id = ...

考慮すべきことの1つは、可換性です。AがBの友達である場合、BはAの友達ですか。

于 2012-10-18T13:07:49.697 に答える
1

すべてのユーザープロパティを含むユーザーテーブルを作成してから、ユーザー間の関係を格納する別のテーブルを作成します。

リレーションシップテーブルには2つの列が含まれ、各列にはuser_idが含まれます。このテーブルには、2人のユーザー間の友情を保存する場所があります。(それ以外の場合は、ユーザーごとに1人の友達しか持てません)。

異なるレベルの関係を取得するには、両方のテーブル間で結合を行う必要があります。(使用するRDMBSによっては、いくつかのショートカットがある場合があります)。

それが役に立てば幸い

于 2012-10-18T13:13:55.267 に答える
1

もちろん。それはうまくいくでしょう。あなたが説明したのは、自己参照的な多対多の関係です。クエリはかなり簡単です。$current_userのすべての友達は次のとおりです。

select u.* from users as u 
  inner join friends as f on u.id = f.friend_id 
  where f.user_id = $current_user_id

考慮すべきことは、これは技術的に有向グラフであるということです。したがって、ユーザーAはユーザーBと友達になることができますが、ユーザーBは必ずしもユーザーAと友達である必要はありません。

于 2012-10-18T13:25:46.387 に答える
0

友情を保存する結合テーブルがあります。友情をリクエストしたユーザーのIDを格納する列、リクエストの送信先のユーザーのIDを格納する列、友情が受け入れられたかどうかを格納するブール列、およびいつ保存するタイムスタンプ列があります。リクエストが送信されました。

于 2012-10-18T13:15:53.703 に答える