2009-05-28 50 views
0

誰かが役職に就任するためのスクリプトを作成する必要があります。 )は開きません。だから、2人が同じページに行き、異なった内容を見ることができました。潜在的に同じものもあれば、まったくユニークなものもあります。私は、MySQL DB /テーブルにそのデータを配置する最善の方法は不明です。例えば推奨テーブル1対多/多対1の状況に合わせて設定します

、私はそれが掲示によって配置されたかもしれないが、それは一種のようになります。

PostID VisibleTo 
PostingA user1,user2 

そして、それは(カラム内のCSV形式)間違っているようです。それとも私は、人によってで行くことができる:

User VisiblePosts 

USER1のposting1、posting2

しかし、それは同じ問題です。ユーザーのユニークな投稿、ユニークな投稿、そして一致する場所にのみ参加する方法はありますか?

最初は、別のテーブルセットに対して一連のクエリを実行することによって決定されますが、一度実行されると、ユーザーの後で変更されないときに何度も繰り返し実行されるコードが不足しているように見えますポジションを投稿します。

... 2番目の考えでは変わるかもしれませんが、もしそうでないと仮定すれば(そうでないかもしれないし、ユーザーがもはや適格ではないものを見た場合の結果として)、このシナリオの標準ソリューションですか?

答えて

1

を:M関係。

PostVisibilityなどの追加テーブルを作成し、PostIDUserIDの列を作成します。 PostIDUserIDの組み合わせが表に存在する場合、そのユーザーにその投稿が表示されます。

+0

この場合、ユーザーが3つの投稿を表示していて、それぞれの投稿が2人のユーザーに表示されている場合、userID列のユーザーは3回表示され、3つの投稿はpostID列に表示されます6回?それともコンセプトの一部が欠けていますか? – Anthony

+0

@Anthony、Correct。ユーザーは同じ投稿に「2回」アクセスすることができないため、PostID/UserIDをUNIQUEにする必要があります。 – molf

2

3つのテーブル...

ユーザー: [ユーザーID] [OtherField]

ポスト: [PostId] [OtherFields]

UserPost: [ユーザーID] [PostId ]

User.UserIdがUserPost.UserIdに参加します。 Post.PostIdがUserPost.Postに参加します。同上

は、次にルックアップテーブルUserPostは、あなたが

0

編集を表示するためにどの記事を選択しているときに投稿する加入:申し訳ありませんが、私は、多対多である、あなたが投稿-ユーザ用語で話していると思います。私はこれを、「一対一の権利」という用語を掲示するという観点から考えていました。

何かが欠けていない限り、これは1対多の状況であり、2つのテーブルが必要です。たとえば、各投稿にはn人のユーザーが表示されます。投稿は個々のユーザーに固有のものなので、その逆を行う必要はありません。

  • PostingTable PostingID(および他のデータ)PostingIDと

  • PostingVisibilityTableとユーザIDと

  • ユーザIDとユーザデータとUSERTABLE

は、独立して転記を作成し、その公開権とPostingID/UserIDのペアを個別に追加/削除することができます表。

現在のユーザーに見えるすべての投稿を選択する:これは、多対多の関係またはNであり

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