Empecemos por el principio: ¿Qué es lo que define a los ganadores? ¿Tiene un ciclo de corte, como por ejemplo, un "sorteo" cada X tiempo?
Si se trata de un sorteo al azar, la repitencia es perfectamente válida. Pero si es una selección que sólo puede ocurrir una vez, entonces tienes que resolverlo por medio de un store procedure, porque deberás hacerlo en más de una sentencia.
Es decir, cada selección deberá al mismo tiempo verificar que no exista previamente, lo que podría resultar de este tipo de consulta:
El problema es que
no puedes consultar la misma tabla que estás escribiendo en la misma sentencia. AL menos no en MySQL.
Por eso necesitarías un SP, que sí puede hacerlo, porque podrías crear una tabla temporal para almacenarlo hasta la inserción.
Algo como
Como la tabla "usersorteo" se borra automáticamente cada vez que el SP se termina de ejecutar, no se repetirían jamás los nombres.
Además de esto, te sugiero que generes un indice UNIQUE sobre el campo "user" de la tabla aleatorios.