我正在构建一个需要与组或个人用户共享的站点。我知道谷歌不使用 mysql 的事实,但我想知道如何在我的网站上复制这样的功能。在 g+ 上,您可以:
- 与“公众”分享帖子(每个人都可以看到)。
- 与“所有圈子”分享信息(您圈子中的每个人都可以看到)。
- 与圈子和个人用户分享帖子。例如 post =“我的第一篇文章”并与家人、朋友、用户 1(Joey tribbiani)、用户 2(Ross geller)等共享。
条件:
- 如果帖子与圈子共享并且新用户添加到圈子中,那么他应该能够看到以前与该圈子共享的所有帖子。
- 如果用户从圈子中移除。(s) 他看不到与该圈子共享的帖子,除了他评论过的帖子。
目前我的数据库表是这样的。
Circle_category
Cat_id
Cat_name
user_id
帖子
post_id
user_id
post
is_public
all_circle
Post_to_circle
entry_id
post_id
cat_id
Post_to_user
entry_id
post_id
user_id
在家庭圈子中发布用户(在 Circle_category 中 cat_id 为 1 )可以看到
- 他们可以看到公开的帖子。
- 他们可以查看与所有圈子分享的信息。
- 他们可以查看与家人圈子分享的信息。
- 他们可以看到与他们共享的帖子(个人用户)。
SQL
SELECT p.* FROM posts p
JOIN Post_to_circle pc
ON p.post_id = pc.post_id
JOIN Post_to_user pu
ON p.post_id = pu.post_id
WHERE p.is_public = 1
OR all_circle = 1
OR pc.cat_id = $cat_id
OR pu.user_id = $user_id
问题:
首先,我已经能够从案例 1(查看所有公开帖子)、案例 2(与所有圈子共享的帖子)中获得帖子,但其他 2 个案例不起作用。我考虑了一下,发现主要问题是我指定了 where 子句来获取 p.is_public = 1 的帖子,这意味着它忽略了 p.is_public = 0 的行。我如何更新查询以显示涵盖所有内容的帖子四个案例,也涵盖了我们一开始谈到的条件。
其次,有没有更好的方法来构建我的表格?我不确定我的做法是否正确。