質問

誰かがポジションの募集を投稿し、資格のある人には募集が表示されますが、そうでない(またはオプトアウトした)人には募集が表示されないスクリプトを作成する必要があります。したがって、2 人が同じページにアクセスして、異なるコンテンツ (潜在的に同じものもあれば、完全にユニークなもの) も表示される可能性があります。そのデータを MySQL DB/テーブルに配置する最適な方法がわかりません。

たとえば、投稿ごとに整理することもできますが、次のようになります。

  PostID   VisibleTo
 PostingA    user1,user2

そして、それは間違っているようです (列の CSV スタイル)。または、個人で行くこともできます。

User   VisiblePosts

user1 投稿 1、投稿 2

しかし、それは同じ問題です。ユーザーを一意にし、投稿を一意にし、一致する場合にのみ参加させる方法はありますか?

この決定は最初、別のテーブルのセットに対して一連のクエリを実行することによって行われますが、一度実行されると、ユーザーが位置を投稿した後もコードの一部が変更されない場合に、コードの一部を何度も実行するのは非効率であるように思えます。

...よく考えると、変更される可能性がありますが、変更されないと仮定した場合(その可能性は低く、ユーザーが資格を失ったものを目にしたとしても影響はほとんどないため)、これに対する標準的な解決策はありますか?シナリオ?

役に立ちましたか?

解決

これは、多対多の関係またはN:Mの関係

あなたは、追加のテーブルを作成し、列PostVisibilityPostIDで、UserIDを言います。 PostIDUserIDの組み合わせがテーブルに存在する場合、そのポストは、そのユーザーに表示されます。

他のヒント

の3つの表...

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

ポスト: [PostId] 【OtherFields

UserPost: [ユーザーID] 【PostId

User.UserIdは、UserPost.UserIdに参加します Post.PostIdがUserPost.PostIdに参加

そして、あなたは、表示する記事を選択しているとき、ポストに入社、テーブルUserPostを検索

編集:申し訳ありませんが、投稿ユーザーと多対多の用語で話していると思います。私はこれを、投稿と「閲覧権」の条件、つまり 1 対多の観点から考えました。

何かが欠けている場合を除き、これは 1 対多の状況であり、2 つのテーブルが必要です。たとえば、各投稿には、それを閲覧できる n 人のユーザーがいます。投稿は個々のユーザーに固有であるため、逆の操作を行う必要はありません。

  • PostingID (およびその他のデータ) を含む PostingTable

  • PostingID と UserID を含む PostingVisibilityTable

  • UserID とユーザーデータを含む UserTable

表示権限とは別に投稿を作成し、表示テーブルに対して PostingID/UserID のペアを個別に追加/削除します。

現在のユーザーに表示されるすべての投稿を選択するには:

SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top