Ver Mensaje Individual
  #11 (permalink)  
Antiguo 14/02/2014, 09:22
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: recoger 2 registros diarios aleatoriamente

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:
Código MySQL:
Ver original
  1. INSERT INTO aleatorio (`USER`)  
  2. SELECT nombre
  3. FROM usuarios
  4. WHERE `user`NOT IN (SELECT `user` FROM aleatorio)
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
Código MySQL:
Ver original
  1. DELIMITER $$
  2.     CREATE TEMPORARY TABLE usersorteo
  3.     AS
  4.     SELECT nombre
  5.     FROM usuarios
  6.     WHERE `user`NOT IN (SELECT `user` FROM aleatorio)
  7.     ORDER BY rand() LIMIT 2;
  8.  
  9.     INSERT INTO aleatorio
  10.     SELECT *
  11.     FROM usersorteo;
  12. END$$
  13.  
  14. DELIMITER ;

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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)