Foros del Web » Programando para Internet » PHP »

mostrar datos de la BD de manera aleatoria sin q se repitan

Estas en el tema de mostrar datos de la BD de manera aleatoria sin q se repitan en el foro de PHP en Foros del Web. Hola espero que me podais echar una manilla en esto por favor, haber estoy haciendo un cuestionario en el que me salen preguntas aleatorias que ...
  #1 (permalink)  
Antiguo 13/12/2008, 13:17
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
mostrar datos de la BD de manera aleatoria sin q se repitan

Hola espero que me podais echar una manilla en esto por favor, haber estoy haciendo un cuestionario en el que me salen preguntas aleatorias que tengo en la base de datos. Y lo que pretendo es que no se me repitan, pues si me salen aleatorias pero alguna siempre se me repite.
He probado la funcion rand () pero esta me repite algunos numeros.
¿Que funcion o que parametros debo enviar a la funcion para que me genere estas preguntas aleatoriamente SIN QUE SE REPITAN?

He pensao también que si no hubiera función que no lo hace por si solo, tendría que generar una función recursiva y que cada vez que genere un número aleatorio (id de pregunta) compruebe que esta no exista. Si existe, generar otro hasta que genere uno que no exista. Creo que para esto se podria usar el foreach, pero el csao es q no se como aplicarlo. Si alguien me pudiera dar una solución por favor???? llevo ya tiempo dandole vueltas a esto y no saco nada. Gracias
  #2 (permalink)  
Antiguo 13/12/2008, 13:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: mostrar datos de la BD de manera aleatoria sin q se repitan

Mmmm haz intentado usar ORDER BY RAND() en tu consulta SQL? Eso te da los datos evitando repeticiones.

Saludos.
  #3 (permalink)  
Antiguo 13/12/2008, 13:25
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: mostrar datos de la BD de manera aleatoria sin q se repitan

Si si lo he probado pero se me repiten.
  #4 (permalink)  
Antiguo 13/12/2008, 13:27
 
Fecha de Ingreso: octubre-2004
Mensajes: 88
Antigüedad: 19 años, 6 meses
Puntos: 2
Respuesta: mostrar datos de la BD de manera aleatoria sin q se repitan

Hola, no tienen porque repetirse, seguro tienes alguna condicion que salen los valores repetidos,

o podrias pegar el codigo para analizarlo mejor?
__________________
Consejos de Programación
  #5 (permalink)  
Antiguo 13/12/2008, 13:48
 
Fecha de Ingreso: diciembre-2008
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: mostrar datos de la BD de manera aleatoria sin q se repitan

Mira lo que estoy haciendo es esto:
Código:
function aleatorio($id)
{
         $sentencia = mysql_query("SELECT * FROM temporal");
         $row = mysql_fetch_array($sentencia);
         foreach($row as $prueba)
         {
               if($prueba!=$id) 
               {
                    return $id;
               }
         }   
}


srand (time());
$numero_aleatorio = rand(2,10);
$comprobar = aleatorio($numero_aleatorio);
                 
$preguntas = mysql_query(utf8_decode("SELECT * FROM preguntasOptica WHERE idPregunta ='$comprobar'"));
         while($row = mysql_fetch_assoc($preguntas)) 
         {
                   echo "&pregunta=".utf8_encode($row['pregunta']);            
         }
             
         mysql_query("INSERT INTO temporal(preguntaT) VALUES ($comprobar)");
lo que pretendo hacer es que el numero que me genere alaeatoriamente que correspondera con el id de la pregunta me lo compare con el id que aparezca en una tabla temporal que he creado donde se van insertando los id (numeros aleatorios) que van saliendo, de esta manera no se repetiria ninguno. Pero el problema es q no m sale esto. Si le pudiseis echar un vistacillo. GRACIAS
  #6 (permalink)  
Antiguo 13/12/2008, 14:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: mostrar datos de la BD de manera aleatoria sin q se repitan

Pues no veo en que parte de tu código uses el ORDER BY RAND(), si haces lo aleatorio desde PHP es muy probable que si se repitan, por eso mi consejo de que el rand lo hagas en la BDD.

Saludos.
  #7 (permalink)  
Antiguo 13/12/2008, 14:28
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: mostrar datos de la BD de manera aleatoria sin q se repitan

Como dice GatorV, intneta utilizar ORDER BY RAND() en tu consulta SQL, concretamente en
Código PHP:
$preguntas mysql_query(utf8_decode("SELECT * FROM preguntasOptica WHERE idPregunta ='$comprobar'")); 
Saludos,
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 18:05.