Foros del Web » Programando para Internet » PHP »

más aleatorio???

Estas en el tema de más aleatorio??? en el foro de PHP en Foros del Web. Hola compañeros: Llevo 2 días con el rand y el shuffle a vueltas, pero no consigo que la salida de datos de mi BD, (una ...
  #1 (permalink)  
Antiguo 04/06/2003, 12:47
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 15 años
Puntos: 0
más aleatorio???

Hola compañeros:

Llevo 2 días con el rand y el shuffle a vueltas, pero no consigo que la salida de datos de mi BD, (una tabla con 14 registros), sea lo aleatoria que se requiere. El porcentaje de veces que sale el mismo registro es del 90%, o sea...

¿Cómo hacer para que sea más aleatoria?

Gracias de antemano.
saludos

¿Podría extraer todos los ID de BD con un select, desordenarlos, coger el primero de la lista, y hacer otro query en donde Where=a ese primer registro salido del desorden de todos los registros?
__________________
Salud y forza
  #2 (permalink)  
Antiguo 04/06/2003, 12:53
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Y probaste un :
SELECT campos FROM tabla ORDER BY RAND(); ?

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #3 (permalink)  
Antiguo 04/06/2003, 13:50
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 15 años
Puntos: 0
Estoy con un

$cons = "select * from `artistas` order by rand() limit 1";

tengo sólo 14 registros, pero casi siempre sale el mismo de primero.???????

Oye, felicidades por lo de la paginación, comenzé a usarlo y va de lujo.
saludos
__________________
Salud y forza
  #4 (permalink)  
Antiguo 04/06/2003, 15:09
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Es el eterno problema con los numeros aleatorios en informatica. Nunca son lo suficientemente aleatorios.

El mayor problema que he encontrado yo es que el primero se repite mucho, el resto varia mas.

Una opcion seria hacer la consulta de todos los registros con el order by RAND(), meterlos en un array, hacer el shuffle del array y usar la funcion rand() de PHP (con su correspondiente srand()) para generar el indice del array. Asi metes tres niveles de aletoriedad: MySQL, shuffle y rand.

Suerte, y ya contaras.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 07/06/2003, 20:27
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 15 años
Puntos: 0
Oye Josemi, es que me pierdo.
Bien hago el select
$cons = "select * from `artistas` order by rand()";
pero ¿donde hago el shuffle?

$resultado = mysql_query($cons, $conex) or die("Error MySQL dice : <b>".mysql_error()."</b>");
while ($fila=mysql_fetch_array($resultado))

¿en el array $fila?

Saludos
__________________
Salud y forza
  #6 (permalink)  
Antiguo 07/06/2003, 21:28
Avatar de LeoIglesias  
Fecha de Ingreso: enero-2003
Ubicación: Concepcion del Uruguay
Mensajes: 53
Antigüedad: 14 años, 11 meses
Puntos: 0
tendrias que probar con hacer un script de PHP. Segun recuerdo haber leido alguna vez en MYSQL.COM el rand() del mysql no es tan rand como nos gustaria......

Si buscas en estos mismos foros veras que hay algun que otro script como el que te digo....


Saludos

Leo(!)
  #7 (permalink)  
Antiguo 07/06/2003, 22:17
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 15 años
Puntos: 0
hola mira si tu tabla tiene un campo id y es numerico y auto incrment te servira esto me ha funcionado:

Código PHP:
<?
$conex
=mysql_connect("localhost","root","");
mysql_select_db("huevox",$conex);
$cuanto=mysql_query("select COUNT(*) from news");
$cuanto2=mysql_result($cuanto,0);

$azar=rand($cuanto2,1);
$mostramos=mysql_query("select * from news where id='$azar'");
while(
$row=mysql_fetch_assoc($mostramos)){

echo 
$row[titulo];

?>
me avisas si te sirve
__________________

la vida es bella cuando no es culera
  #8 (permalink)  
Antiguo 08/06/2003, 14:30
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

festeiro, dentro el while que recorre el rocrdset, vas añadiendo la fila a un array, con $array[]=$fila;. Una vez acabado el while, haces el shuffle de $array() y luego usas rand() para calcular un indice entre 0 y el numero de elementos de $array - 1.

sdf23, tu metodo solo sirve si no se ha eliminsado ningun registro. Si se ha eliminado alguno, hay seguridad del que el ID $azar exista. Para esto seria mejor hacer la consulta de todos los registros ordenados aleatoriamente, y usar la funcion mysql_data_seek() pasandole como posicion del registro el $azar.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 09/06/2003, 07:56
Avatar de festeiro  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 48
Antigüedad: 15 años
Puntos: 0
Gracias a todos.
Josemi, voy a intentar con ese nuevo código que pones.
de todas formas, entre unos y otros me llevasteis a escribir:

Código PHP:
srand((double) microtime() * 1000000);
$cons "select * from `artistas` WHERE 1 order by rand(),rand() desc, rand() limit 1"
Con 14 registros, y aún con huecos en el ID, me va de lujo. Es todo lo aleatorio que se puede pedir.

gracias, y espero que también os sirva ese cachito de código.
Viva la aleatoriedad.
__________________
Salud y forza
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 08:02.