你在正确的轨道上。您将要使用链接表。您将从表用户开始。每个用户都有一个 id。然后创建一个表users_friends。该表将包含两个 id,user_id 和friend_id。最后一个表是 users_restricted,它也包含两个 id,user_id 和 restricted_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 都来自 users 表。这也可以扩展为与条目相关。只需通过他们的 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 的条目之外的所有条目信息。