Domanda

Ho bisogno di creare uno script in cui qualcuno pubblicherà un'apertura per una posizione, e chiunque ha diritto vedrà l'apertura, ma chi non è (o opta out) non vedrà l'apertura. Così due persone potevano andare alla stessa pagina e vedere contenuti diversi, alcuni potenzialmente lo stesso, alcuni assolutamente unico. Non sono sicuro che il modo migliore per organizzare i dati in un DB MySQL / tavola.

Per esempio, avrei potuto è organizzato dal distacco, ma che sarebbe guardare un po 'come:

  PostID   VisibleTo
 PostingA    user1,user2

E che sembra sbagliato (lo stile CSV nella colonna). Oppure potrei andare con per persona:

User   VisiblePosts

user1 posting1, posting2

Ma è lo stesso problema. C'è un modo per rendere l'utente unico, unico distacco, e li hanno unirsi solo se corrispondono?

La decisione è inizialmente fatta facendo una serie di domande a un'altra serie di tabelle, ma una volta che viene eseguito, sembra inefficiente avere che qualche pezzo di codice eseguito di nuovo e di nuovo quando non cambierà dopo che i messaggi degli utenti la posizione.

... A pensarci bene, potrebbe cambiare, ma se assumiamo che non (come è improbabile, e come poca importanza se un utente vede qualcosa che non sono più ammissibili per lo sono), c'è uno standard soluzione per questo scenario?

È stato utile?

Soluzione

Questa è una relazione molti-a-molti o n. M rapporto

Si potrebbe creare una tabella aggiuntiva, dire PostVisibility, con una colonna e PostID UserID. Se è presente nella tabella una combinazione di PostID e UserID, che post è visibile all'utente.

Altri suggerimenti

Tre tavoli ...

Utente: [ID utente] [OtherField]

Messaggio: [PostID] [OtherFields]

UserPost: [ID utente] [PostID]

User.UserId unisce alla UserPost.UserId, Post.PostId entra a far parte di UserPost.PostId

Poi cercare il tavolo UserPost, unendo alla Posta quando si selezionano quali post da mostrare

Modifica: Ci dispiace, penso che si sta parlando in termini Distacco-utente, che è molti-a-molti. Stavo pensando di questo in termini di termini posting- "i diritti di visione", che è uno-a-molti.

A meno che non mi manca qualcosa, questa è una situazione uno-a-molti, che richiede due tavoli. Per esempio, ogni registrazione ha n utenti che possono visualizzarlo. Commenti sono unici per un singolo utente, in modo da non c'è bisogno di fare il contrario.

  • PostingTable con IDannuncio (e altri dati)

  • PostingVisibilityTable con IDannuncio e UserID

  • usertable con i dati UserID e degli utenti

Crea i messaggi indipendentemente dai loro diritti di visibilità, e poi separatamente aggiungere / rimuovere le coppie / UserID IDannuncio contro il tavolo visibilità.

Per selezionare tutti i messaggi visibili per l'utente corrente:

SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top