1

私はPHP+MySqlを使用するアプリケーションに取り組んでいます。私のアプリケーションには、ユーザー用のテーブル、関係(友達、フォロー中、サブスクライブ済み)用のテーブル、投稿用のテーブルがあります。ユーザーの主なアクションは次のとおりです。

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

ユーザーAがユーザーBと友達である場合、ユーザーAはユーザーBからのすべてのエントリを表示できます。ただし、ユーザーBは、たとえば、少数の友達にのみアクセスを制限できます。ここでのクエリは次のとおりです。これらの権限をどのように管理できますか?特定のエントリの表示がブロックされている各ユーザーを格納するテーブルを考えていましたが、1人のユーザーが複数の友達を持つことができるようになると、これはお勧めできません。では、どうすればこれを解決できますか?誰かが私に始める方法を教えてもらえますか?たぶん、グーグルで検索するための正しい用語または同様のもののリンク。

4

2 に答える 2

1

あなたは正しい方向に進んでいます。リンクされたテーブルを使用する必要があります。テーブルユーザーから始めます。各ユーザーにはIDがあります。次に、テーブルusers_friendsを作成します。このテーブルは、user_idとfriend_idの2つのIDで構成されます。最後のテーブルはusers_restrictedで、これもuser_idとrestricted_idの2つのIDで構成されます。

例えば

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に制限されているエントリーを除くすべてのエントリー情報を選択します。

于 2012-01-11T02:36:41.603 に答える
0

次のテーブルの使用を開始できます。最初のテーブルはusersテーブルです(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-すべて許可します。列の許可データ型はSET( '1'、 '0')として設定され、エントリのデータ型はNULLとして設定される場合があります。
したがって、user1はentry1からuser2への表示を許可しません。(entry1とentry3はentrysテーブルからのものです)。

于 2012-01-11T06:19:47.587 に答える