質問

私はPHP + MySQLのアプリケーションに取り組んでいます。私のアプリケーションには、ユーザー用のテーブル、関係のテーブル(友人、フォロー、購読)、投稿用のテーブルがあります。ユーザーの主なアクションは次のとおりです。

  • ユーザーには友達がいます
  • ユーザーは投稿エントリを作成できます
  • ユーザーは友達のエントリを見ることができます
  • そして最後に ユーザーは、特定の友達の視聴をブロックできます

ユーザーAがユーザーBと友達である場合、ユーザーAはユーザーBのすべてのエントリを表示できますが、ユーザーBはたとえば少数の友人のみへのアクセスを制限できます。ここで、クエリは次のとおりです。これらのアクセス許可を管理するにはどうすればよいですか?特定のエントリを表示するためにブロックされている各ユーザーを保存するテーブルを考えていましたが、1人のユーザーに数人の友達ができたら、これは良い考えではありません。それで、どうすればこれを解決できますか?誰かが私に始める方法を教えてもらえますか?たぶん、Googleで検索するのに適した用語や、似たようなものをリンクするのでしょう。

役に立ちましたか?

解決

あなたは正しい軌道に乗っています。リンクされたテーブルを使用したいと思います。テーブルユーザーから始めます。各ユーザーにはIDがあります。次に、テーブルusers_friendsを作成します。このテーブルは、user_idとfriend_idの2つのIDで構成されます。最後のテーブルは、user_idとrestricted_idの2つのidsで構成されるusers_restrictedです。

例えば

users
user_id name 
1       user1
2       user2
3       user3

users_friends
friend1_id friend2_id
1          2
2          3

これは、ユーザー1と2が友達であり、ユーザー2と3は友達であると言います。 (これは、ユーザー1がユーザー2と友達である場合、ユーザー2もユーザーと友達であると仮定します1)

users_restricted
user_id restricted_id
1       2

ユーザー1とユーザー2は友人ですが、ユーザー2は制限されたリストにあります。つまり、ユーザー2がユーザー1のエントリを表示できるようにしません。

テーブルはIDを介してリンクされ、すべてのIDがユーザーテーブルからリンクされていることがわかります。これは、エントリにも関連するように拡張できます。 IDでエントリを参照してください。

特定のエントリをユーザーにブロックするには、次のテーブルがあります。

entries
entry_id user_id ... other columns holding entry information
1        1
2        1
3        2
4        2

ユーザー1は2つのエントリ(エントリ1とエントリ2)を作成し、ユーザー2は2つのエントリ(エントリ3とエントリ4)を作成しました。別のテーブルが制限を保持します。

entries_restricted
entry_id restricted_user_id
1        2

これにより、ユーザー2はエントリ1を表示できません。

ユーザー2にエントリを表示できるようにするために、ステートメントはこのようなものになります。

SELECT e.*, er.entry_id FROM entries e JOIN entries_restricted er ON e.entry_id=er.entry_id WHERE er.restricted_user_id != 2;

ステートメントは、ユーザー2に制限されたエントリを除くすべてのエントリ情報を選択します。

他のヒント

次のテーブルの使用を開始できます。最初のテーブルはユーザーテーブルです(jason.wolfsmithが提案したように)

users
u_user_id     u_name   
1             user1    
2             user2    
3             user3    

2番目のテーブルはこのようなものです。

friends_permissions
f_user_id  f_friend_id permission entries
1          2               1        entry1        
2          3               0
1          3               1        entry3

このテーブルには、ビューを許可する必要があるエントリの許可と名前が含まれます。 1-いくつかのエントリを制限します。 0-すべてを許可します。列で 許可 データ型は設定された( '1'、 '0')、およびデータ型として設定される場合があります エントリ ヌル。
したがって、user1はentry1をユーザー2に表示することを許可しません。 (Entry1とEntry3はエントリテーブルからのものです)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top