2010-04-08 9 views
7

Concettualmente come si dovrebbe scrivere un sistema di risultati per un sito Web utilizzando PHP e MySQL?Un sistema di risultati come qui su StackOverflow in PHP?

L'unico vero modo per farlo è di eseguire costantemente query MySQL per verificare i risultati e così via?

+0

i "Dico che era l'unico vero modo di farlo, dal momento che avresti bisogno di essere in grado di tenere traccia di quali risultati sono già stati raggiunti. – studioromeo

+0

Dato che stiamo parlando a livello concettuale, non penso che questa domanda abbia qualcosa a che fare con MySQL o PHP. – pkaeding

+0

PHP e MySQL hanno limitazioni, nello sviluppo del gioco ho un motore che ha un sistema di eventi, tutto quello che devo fare è ascoltare i risultati per determinare se c'è stato un risultato raggiunto. È setoso ed efficiente, ma non può essere fatto in php in modo efficiente. – tweetypi

risposta

1

Si potrebbe prendere in considerazione la possibilità di porre una domanda simile su meta, per vedere se Jeff è disposto a condividere qualsiasi delle sue lezioni apprese in questa arena. Se lo fai, la domanda dovrebbe essere specificamente sul modo in cui SO ha affrontato il problema. Questa domanda, tuttavia, è una domanda perfettamente valida per questo sito (poiché si tratta di creare un nuovo progetto, ispirato a ciò che è stato fatto su SO).

Sospetto, tuttavia, che il team SO abbia un lavoro che esegue periodicamente una serie di query per cercare nuovi badge da assegnare e quindi li assegna. Questo è il motivo per cui i badge non vengono assegnati immediatamente dopo che l'azione è stata intrapresa per ottenerli.

+0

ah che in realtà è un buon punto!Non mi ero nemmeno reso conto che i badge non sono stati premiati non appena sono stati premiati, è logico perché queste query sarebbero piuttosto lente ... peccato non poter essere fatto all'istante .. – tweetypi

+20

Questo fa ** NON ** appartieni alla meta –

+2

no, non intendevo che questa domanda appartenesse alla meta. Intendevo dire che chiedere al team SO le informazioni apprese durante lo sviluppo di SO potrebbe essere una domanda sorella appropriata a questo. Ho aggiunto dei chiarimenti al riguardo. – pkaeding

14

si hanno due opzioni, e molto probabilmente li possono combinare:

Si può avere un cron-lavoro che viene eseguito ogni X minuti, e corre sul database a guardare l'controlli utente e se meritano una nuova distintivo.

Ad esempio, StackOverflow implementa questo per il badge Risposta piacevole. Ogni volta che viene eseguito, controlla quante risposte hanno +10 upvotes e vede se è necessario ricevere un altro badge. (Visualizza 5 post con 10 upvotes e 4 Nice Answer Badge, ottieni un badge). Jeff ha già affermato che questo significa che se ottieni una risposta che ottiene un voto di 10, poi ha downvoted, e quindi un altro post ottiene 10 voti, non riceverai un badge.

La seconda opzione è trigger basati su eventi. Che sono davvero semplicemente:

$badgeSystem->giveBadge("Some Badge Name", $User_ID); 

Questo può essere utilizzato per eventi che si sa stanno accadendo. Come il distintivo dell'autobiografo. È probabile che l'utente non compilerà il suo profilo a meno che non venga premuto il pulsante di invio, quindi il sito potrebbe semplicemente verificare se l'utente ha compilato l'intera operazione, e se lo hanno, e hanno ancora bisogno del badge, lo ricevono.

Il cron-job deve essere utilizzato per le azioni che vengono costantemente controllate. Cose come obiettivi quantitativi come visitare il sito per 150 giorni o modificare 500 volte.

Il trigger basato su evento deve verificarsi quando un evento si verifica solo se l'utente esegue un'azione specifica, ad esempio l'invio di un modulo.

(Probabilmente si potrebbe utilizzare uno per quasi tutte le situazioni. Il trigger event-based fornisce un feedback più veloce però ..)

Problemi correlati