tiene dos opciones, y lo más probable puede combinarlos:
Puede tener un trabajo programado que se ejecute cada X minutos, y se ejecuta sobre la base de datos mirando cada usuario y comprueba si se merecen un nuevo distintivo.
Por ejemplo, StackOverflow implementa esto para el distintivo Nice Answer. Cada vez que se ejecuta, comprueba cuántas Respuestas con +10 votaciones ascendentes tiene, y ve si necesita que se le otorgue otra insignia. (Ve 5 publicaciones con 10 votaciones ascendentes y 4 insignias de respuesta agradables, obtienes una insignia). Jeff ya ha declarado que esto significa que si obtienes una respuesta que recibe un 10 voto, luego una votación negativa, y luego otra publicación obtiene 10 votos, no obtendrás una insignia.
La segunda opción es desencadenadores basados en eventos. Que son realmente simples:
$badgeSystem->giveBadge("Some Badge Name", $User_ID);
Esto se puede utilizar para eventos que usted sabe que están sucediendo. Como la insignia Autobiographer. Lo más probable es que el usuario no complete su perfil a menos que se presione el botón de enviar, por lo que el sitio podría simplemente verificar si el usuario ha completado todo, y si lo han hecho, y todavía necesitan la insignia, la obtienen.
El cron-job debe utilizarse para acciones que se comprueban constantemente. Cosas como objetivos cuantitativos como visitar el sitio durante 150 días o editar 500 veces.
El desencadenador basado en eventos debe ocurrir cuando un evento solo ocurrirá si el usuario realiza una acción específica, como enviar un formulario.
(Probablemente se podría utilizar ya sea para casi cualquier situación. El disparador basada en eventos proporciona una retroalimentación más rápida, aunque ..)
i Diría que esa fue la única forma real de hacerlo, ya que necesitaría poder hacer un seguimiento de los logros que ya se han logrado. – studioromeo
Como hablamos a nivel conceptual, no creo que esta pregunta tenga nada que ver con MySQL o PHP. – pkaeding
PHP y MySQL tienen limitaciones, en el desarrollo de juegos tengo un motor que tiene un sistema de eventos, todo lo que tengo que hacer es escuchar los logros para determinar si se logró un logro. Es sedoso y eficiente, pero no se puede hacer en php de manera eficiente. – tweetypi