Domanda

Sto lavorando ad un'app PHP che ha diversi oggetti su cui è possibile commentare. Ogni commento può essere votato, con gli utenti in grado di dare +1 o -1 (come Digg o Reddit). In questo momento sto programmando di avere una tabella di "voti" che contenga user_id e le loro informazioni di voto, che sembra funzionare bene.

Il fatto è che ogni oggetto ha centinaia di commenti che sono memorizzati in una tabella di commenti separata. Dopo aver caricato i commenti, devo calcolare i voti e quindi controllare individualmente ogni voto contro l'utente per assicurarmi che possano votare una sola volta. Funziona ma sembra davvero intensivo per il database - molte domande solo per i commenti.

Esiste un metodo più semplice per farlo che richiede meno DB? La mia attuale struttura di database è il modo migliore per andare?

Per essere più chiari sull'attuale struttura del database:

Tabella dei commenti:

  • user_id
  • object_id
  • total_votes

Tabella dei voti:

  • COMMENT_ID
  • user_id
  • voto

Fine obiettivo:

  • Consenti all'utente di votare una sola volta su ciascun commento con almeno # query MySQL (ogni oggetto ha più commenti)
È stato utile?

Soluzione

Per assicurarti che ogni elettore voti una sola volta, progetta la tua tabella dei voti con questi campi & # 8212; CommentID, UserID, VoteValue. Imposta CommentID e UserID come chiave primaria, che assicurerà che un utente ottenga un solo voto. Quindi, per richiedere i voti per un commento, fai qualcosa del genere:

SELECT SUM(VoteValue)
FROM Votes
WHERE CommentID = ?

Aiuta?

Altri suggerimenti

Perché non salvi i voti totali per ogni commento? Aumenta / diminuisci questo quando si è verificato un nuovo voto.

Quindi devi verificare se l'utente ha votato specificamente per questo commento per consentire un solo voto per commento per utente.

È possibile inserire una condizione di join sql che restituisce tutti i voti sui commenti fatti dall'utente corrente per questo oggetto, se non si ottengono righe, l'utente non ha votato. Questo è leggermente diverso dal fatto che tu controlli ogni commento uno alla volta nel programma.

per quanto riguarda la struttura del database, mantenere separate queste cose sembra perfettamente logico. voto {user_id, object_id, object_type, vote_info ...)

Forse lo stai già facendo, scusa ma non potrei interpretare dal tuo post se fosse così.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top