2009-05-28 107 views
0

我需要创建一个脚本,其中某人将张贴某个职位的开头,并且任何符合条件的人都将看到该开头,但任何不是(或不选择) )将不会看到开幕。因此,两个人可以进入同一页面并看到不同的内容,有些可能是相同的,有些是完全独特的。我不确定将这些数据安排在MySQL DB /表中的最佳方式。推荐表设置为一对多/多对一的情况

例如,我可以把它安排在张贴,但看起来有点像:

PostID VisibleTo 
PostingA user1,user2 

这似乎是错误的(该CSV风格列)。或者,我可以与人去:

User VisiblePosts 

USER1 posting1,posting2

但它是同样的问题。有没有办法让用户的独特性,发布的独特性,并让他们只加入他们匹配的地方?

该决定最初是通过对另一组表进行一系列查询来做出的,但是一旦运行它,似乎效率不高,因为某些代码块一次又一次地运行,当它在用户之后不会改变时张贴位置。

...关于第二个想法,它可能会改变,但如果我们假定它没有(因为它是不太可能了,因为几乎没有影响,如果用户看到的东西,他们不再有资格的),有一个此场景的标准解决方案?

回答

1

这是一个多到多的关系或N:M关系。

您可以创建一个附加表格,例如PostVisibility,列号为PostIDUserID。如果表格中存在PostIDUserID的组合,则该帖子对该用户可见。

+0

因此,在这种情况下,如果用户有3个帖子可见,并且每个帖子对2个用户都可见,则userID列会将该用户列出3次,并且他的3个帖子将出现在postID列中6次?或者我缺少这个概念的一部分? – Anthony 2009-05-28 07:19:18

2

三个表...

用户: [用户ID] [OtherField]

帖子: [帖子ID] [OtherFields]

UserPost: [用户ID] [帖子ID ]

User.UserId加入UserPost.UserId, Post.PostId加入到UserPost.Post ID

然后查表UserPost,加入到后,当你选择哪个职位,以显示

0

编辑:对不起,我想你是在发布用户来说的,这是许多到很多。我在posting-“查看权限”而言,这是一个一对多的角度来思考这一点。

除非我失去了一些东西,这是一个一对多的情况,这需要两个表。例如,每个发布有n个可以查看它的用户。帖子是独一无二的个人用户,所以你不需要做反向。

  • PostingTable与PostingID(和其它数据)

  • PostingVisibilityTable与PostingID和用户ID

  • 用户表与用户ID和用户数据

独立地创建的贴子其可见性权限,然后根据可见性分别添加/删除PostingID/UserID对表。

要选择与当前用户可见的所有过帐:

SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"