Foros del Web » Programando para Internet » PHP »

Problemas al paginar utilizando order by rand()

Estas en el tema de Problemas al paginar utilizando order by rand() en el foro de PHP en Foros del Web. hola, mi problema es el siguiente: yo recupero datos de la DB mysql y los muestro en un listado que voy paginando para mostrar los ...
  #1 (permalink)  
Antiguo 16/03/2011, 09:47
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 15 años, 7 meses
Puntos: 5
Problemas al paginar utilizando order by rand()

hola, mi problema es el siguiente:
yo recupero datos de la DB mysql y los muestro en un listado que voy paginando para mostrar los resultados de a 10.
mi problema es que como utilizo la sentencia order by rand() me lo ordena aleatorio y cuando voy por ejemplo a la pagina 2 me vuelven a aparecer algunos que ya estaban en la 1.
la idea seria que una ves que eligio el orden aleaorio se mantenga en ese para pasar las paginas con ese orden.
se puede ??
__________________
un saludo..... . . .
  #2 (permalink)  
Antiguo 16/03/2011, 09:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Problemas al paginar utilizando order by rand()

caray, creo que no entiendes el significado de aleatorio...

¡claro que no se puede mantener un orden aleatorio! (y eso que la contradicción es bien clara)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/03/2011, 10:57
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 15 años, 7 meses
Puntos: 5
Respuesta: Problemas al paginar utilizando order by rand()

a mi me parece que vos no entendiste la pregunta.
ya se lo que es aleatorio...
y justmente si en cada consulta le pongo el aleatorio junto con el limit no da la pregunta es si se puede hacer que recupere TODOS los datos, los desordene y despues en base a eso genere un limit...
cosa que sea aleatorio cuando abris la pag pero ese orden aleatorio se mantenga al pasar a la pag dos:

ejemplo clarisimo:

1 2 3 4 5 6 7 8 9 10 11 12 13

la pag muestra solo 10 entonces la idea es que haga esto.
elige aleatoriamente.

1 4 3 10 13 5 2 8 7 9 12 6 11

y como la pag muestra solo dies las paginas lo muestren asi:

pagina 1:
1 4 3 10 13 5 2 8 7 9
pagina 2:
12 6 11

creo que esta entendible no ?????
__________________
un saludo..... . . .
  #4 (permalink)  
Antiguo 16/03/2011, 11:16
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 10 meses
Puntos: 155
Respuesta: Problemas al paginar utilizando order by rand()

A ver si entendi bien , no se como tengas implementada tu paginacion pero me imagino que es como de este tipo

http://www.desarrolloweb.com/articulos/1035.php

si asi es podrias organizar el resultset en forma de un arreglo y que la funcion
http://www.php.net/manual/es/function.shuffle.php

para cuando lo vayas imprimiendo pues salga en orden aleatorio
  #5 (permalink)  
Antiguo 16/03/2011, 11:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas al paginar utilizando order by rand()

RAND() en MySQL soporta una semilla, esto se usa para poder generar números aleatorios con cierta "constancia", usando ese seed puedes hacer lo que quieres, por ejemplo:
Código PHP:
Ver original
  1. $seed = "123456";
  2. $query = "SELECT * FROM tabla ORDER BY RAND($seed) LIMIT 0, 10";

Con eso se mantiene ese orden al pasarle a RAND() la misma semilla.

Saludos.
  #6 (permalink)  
Antiguo 16/03/2011, 12:14
 
Fecha de Ingreso: febrero-2009
Mensajes: 580
Antigüedad: 15 años, 10 meses
Puntos: 13
Respuesta: Problemas al paginar utilizando order by rand()

pues deberías controlar el rango de valores que te coja en cáda página, y luego, los ordenas aleatorioamente,

algo como:

Código PHP:
...WHERE id>and id<y order by rand()... 
-EDIT-

[luego he visto] GatorV, podrías explicar la función de $seed en tu ejemplo?

un saludo!
__________________
¿ya conoces la red social de cocina? descubre y comparte recetas de cocina
TONIWEB, un programador web freelance

Última edición por Bam_Margera; 16/03/2011 a las 12:17 Razón: añado pregunta
  #7 (permalink)  
Antiguo 16/03/2011, 12:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas al paginar utilizando order by rand()

Te dejo una referencia: http://dev.mysql.com/doc/refman/5.0/...functions.html

Y lo que dice puntual:
Cita:
Retorna un valor aleatorio en coma flotante del rango de 0 a 1.0. Si se especifica un argumento entero N, es usa como semilla, que produce una secuencia repetible.
Saludos.
  #8 (permalink)  
Antiguo 16/03/2011, 12:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Problemas al paginar utilizando order by rand()

vaya... ¿quien iba a pensar que la solución venía del mismo SQL?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 16/03/2011, 12:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas al paginar utilizando order by rand()

Cita:
Iniciado por pateketrueke Ver Mensaje
vaya... ¿quien iba a pensar que la solución venía del mismo SQL?
Así es, digo, debe de soportarlo ya que la semilla en rand es muy buena idea para hacer pruebas que sabes que deben de dar un resultado esperado.
  #10 (permalink)  
Antiguo 21/03/2011, 16:16
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 15 años, 7 meses
Puntos: 5
Respuesta: Problemas al paginar utilizando order by rand()

estuve mirando el link pero no logro entender bien la funcion rand() con la semilla que es lo que hace.
podrias explicarlo por favor ??
__________________
un saludo..... . . .
  #11 (permalink)  
Antiguo 21/03/2011, 16:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas al paginar utilizando order by rand()

Genera un número aleatorio en base a la semilla, si le pasas la misma semilla todo el tiempo genera el mismo set de números aleatorios.

Saludos.
  #12 (permalink)  
Antiguo 22/03/2011, 18:43
Avatar de intiweb  
Fecha de Ingreso: mayo-2009
Ubicación: Capital Federal
Mensajes: 363
Antigüedad: 15 años, 7 meses
Puntos: 5
Respuesta: Problemas al paginar utilizando order by rand()

ok entonces si esa semilla la ago aleatoria puedo hacer que cada ves que habras la pagina sea diferente pero se mantenga ;).
gracias master. ya lo logre que bueno eso de la semilla no lo sabia
__________________
un saludo..... . . .

Etiquetas: order, paginar, rand
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 02:31.