Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

random sin repetir

Estas en el tema de random sin repetir en el foro de Mysql en Foros del Web. Hola, Estoy haciendo un sistema de votaciones de notícias que presenta resultados aleatorios con la sentencia: ORDER BY RAND() LIMIT 1 Con esto, cada vez ...
  #1 (permalink)  
Antiguo 17/01/2010, 06:43
 
Fecha de Ingreso: enero-2010
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
random sin repetir

Hola,

Estoy haciendo un sistema de votaciones de notícias que presenta resultados aleatorios con la sentencia:
ORDER BY RAND() LIMIT 1

Con esto, cada vez que se carga la página, muestra una notícia aleatoria de una tabla de la base de datos. El problema está en que me gustaría que cuando

el usuario ya haya votado la notícia, no se le vuelva a mostrar.

Entonces he creado otra tabla donde cada vez que el usuario vota, se añade un registro con el id del usuario que está votando y en otro campo el id de la

notícia que ha votado.

Y aquí me he quedado atascado. No se como hacer la sentencia WHERE

SELECT noticias.id,votadas.id_usuario,votadas.id_noticia FROM noticias
JOIN votadas
ON noticias.id = votadas.id_noticia
WHERE
???????????
ORDER BY RAND() LIMIT 1

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 17/01/2010, 06:59
 
Fecha de Ingreso: enero-2008
Ubicación: /España/Galicia
Mensajes: 928
Antigüedad: 16 años, 5 meses
Puntos: 21
Respuesta: random sin repetir

lo haces en php?

1 while.

$var = false;

while($var != true) {
.... order by rand() LIMIT 1

comprobamos si voto, si voto. no acemos nada y ke repita el while, si no voto.

$var = true;

}


PD: te aconsejo poner algo asi

$var = false;
$c = 0;
while($var != true or $c == 20) {
$c++;


porque si no ahi noticias, o voto todas, nunca sale del bucle.

o tambien puedes sacar en el while, noticias 1 por 1 hasta que no vote.
  #3 (permalink)  
Antiguo 17/01/2010, 08:11
 
Fecha de Ingreso: enero-2010
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: random sin repetir

Gracias por tu respuesta SainT90.

Si, lo estoy haciendo en PHP.

En cuanto a la solución que me propones creo que no sería la más ética. Ya que si el usuario ya ha votado todas, tendría que hacer tantas veces el while como notícias haya... y hay miles de notícias.

creo que se podría hacer más sencillo en el mismo WHERE pero no sé como.
  #4 (permalink)  
Antiguo 17/01/2010, 09:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 2 meses
Puntos: 300
Respuesta: random sin repetir

SELECT noticias.id,votadas.id_usuario,votadas.id_noticia FROM noticias
JOIN votadas
ON noticias.id = votadas.id_noticia
WHERE
noticias.id NOT IN (SELECT votadas.id_noticia FROM votadas WHERE votadas.id_usuario = variableidusuario) ORDER BY RAND() LIMIT 1
  #5 (permalink)  
Antiguo 17/01/2010, 10:35
 
Fecha de Ingreso: enero-2010
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: random sin repetir

Gracias por tu respuesta jurena! Me ha funcionado perfectamente!

He eliminado algunas cosas que sobravan de mi código inicial aplicándole el doble select que has hecho. Dejo a continuación dejo el que me ha funcionado por si alguien lo necesita:

SELECT noticias.id FROM noticias
WHERE
noticias.id NOT IN (SELECT votadas.id_noticia FROM votadas WHERE votadas.id_usuario = variableidusuario)
ORDER BY RAND() LIMIT 1

Saludos!

Última edición por aram80; 17/01/2010 a las 10:45

Etiquetas: random, repetir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:52.