我需要创建一个脚本,其中有人会发布一个职位的开头,任何有资格的人都会看到开场,但任何不(或选择退出)的人都不会看到开场。因此,两个人可以访问同一页面,看到不同的内容,一些可能相同,一些完全独特。我不确定在MySQL数据库/表中安排数据的最佳方法。
例如,我可以通过发布来安排,但这看起来有点像:
PostID VisibleTo
PostingA user1,user2
这似乎不对(列中的CSV样式)。或者我可以和人一起去:
User VisiblePosts
user1 posts1,posting2
但这是同样的问题。有没有办法让用户的唯一性,发布独特,并让他们只在匹配的地方加入?
最初的决定是通过对另一组表进行一系列查询来做出的,但是一旦运行了,在用户发布后不会发生变化的情况下,让一些代码块一次又一次地运行似乎效率低下这个职位。
......第二个想法,它可能会改变,但是如果我们认为它没有(因为它不太可能,并且如果用户看到他们不再符合条件的东西那么重要),是否有标准这种情况的解决方案?
答案 0 :(得分:2)
三张桌子......
用户: [用户身份] [OtherField]
发表: [帖子ID] [OtherFields]
UserPost: [用户身份] [帖子ID]
User.UserId加入UserPost.UserId, Post.PostId加入UserPost.PostId
然后查看表UserPost,当您选择要显示的帖子
时加入Post答案 1 :(得分:1)
这是多对多关系或n:m关系。
您可以使用列PostVisibility
和PostID
创建一个额外的表格,例如UserID
。如果表格中包含PostID
和UserID
的组合,则该帖子对该用户可见。
答案 2 :(得分:0)
编辑:抱歉,我认为您是在发帖 - 用户条款中发言,这是多对多的。我在发布“观看权利”这一术语方面正在考虑这个问题,这是一对多的。
除非我遗漏了某些东西,否则这是一对多的情况,需要两张桌子。例如,每个帖子都有n个用户可以查看它。发布对于个人用户是唯一的,因此您无需反向。
PostingTable with PostingID(和其他数据)
PostingVisibilityTable with PostingID和UserID
具有UserID和用户数据的UserTable
创建与其可见权限无关的帖子,然后针对可见性表单独添加/删除PostingID / UserID对。
选择当前用户可见的所有帖子:
SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"