Foros del Web » Programando para Internet » PHP »

paginación de resultados aleatorios

Estas en el tema de paginación de resultados aleatorios en el foro de PHP en Foros del Web. Hola! Pues eso trato de hacer, listar unos productos aleatoriamente pero con paginación. Si hago la consulta en el paginador con "ORDER BY rand()" los ...
  #1 (permalink)  
Antiguo 03/12/2008, 06:15
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 16 años, 5 meses
Puntos: 3
Pregunta paginación de resultados aleatorios

Hola!
Pues eso trato de hacer, listar unos productos aleatoriamente pero con paginación. Si hago la consulta en el paginador con "ORDER BY rand()" los productos podran salir repetidos en varias páginas y eso no debe quedar asi. Quisiera que los productos salgan aleatorios pero que no se repitan en distintas paginas.

Estoy usando el script "PAGINATOR.INC.PHP".

¿Sería posible hacer esto que pido?

Gracias. Saludos
  #2 (permalink)  
Antiguo 03/12/2008, 07:52
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Respuesta: paginación de resultados aleatorios

Se me ocurre una sola efectiva y es la de generar una cookie/session donde vayas concatenando los ids de los registros mostrados por pagina en un array, algo así:
Código:
$array[1] = '1,4,5';
$array[2] = '10,14,2';
$array[2] = '3,7,9';
...
Y en cada pagina tendrías que hacer un not in ($codigos) donde $codigos sería un join de todo éste array sacado a la posición de la pagina en la que estás (ej, si estas en la page 2 quedaría: 1,4,5,3,7,9.

Espero se haya entendido...saludos
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 03/12/2008, 09:11
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: paginación de resultados aleatorios

Gracias nicolaspar, creo que comprendo lo que dices pero tengo algunas dudas:

- primero: los arrays los debo crear desde el paginador y en el script (index.php por ejemplo) generar la cookie?

- segundo: en el mismo index.php deberia generar $codigos (dependiendo de la page) para hacer la consulta con los registros que me devuelve el paginador

Ando un poco perdido con esto, no me vendria mal una explicación un poco mas "for dummies" XD

Gracias

Saludos
  #4 (permalink)  
Antiguo 03/12/2008, 09:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: paginación de resultados aleatorios

Hola:

Basándome en un paginador que hice en Ajax: Ajax: Galería de imágenes paginada, la teoría que uso es obtener todos los elementos (sus claves) y ponerlos en un array y luego para rescatarlos uso in... o sea para obtener ese array se debería poner order by rand()...
select clave from tabla order by rand()...

where $clave in ($items);

En esa página se puede ver el código ajax para buscar esos datos.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 03/12/2008, 10:15
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: paginación de resultados aleatorios

Gracias caricatos.
La verdad es que no se puedo hacer lo que dices...
El paginador se ejecuta cada vez que cambias de page, asi k los registros se vuelven a ordenar aleatoriamente y pueden aparecer items que ya hayan aparecido en otras pages.

Debe haber alguna forma para que despues de hacer esto:

while($row = mysql_fetch_array($_pagi_result))

se pueda coger los resultados (por ejemplo 5 productos) y ordenarlos aleatoriamente... Asi no se repetiran y ademas seran aleatorios

¿Alguna idea? Muchas Gracias
  #6 (permalink)  
Antiguo 03/12/2008, 10:18
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: paginación de resultados aleatorios

Cita:
Debe haber alguna forma para que despues de hacer esto:

while($row = mysql_fetch_array($_pagi_result))

se pueda coger los resultados (por ejemplo 5 productos) y ordenarlos aleatoriamente... Asi no se repetiran y ademas seran aleatorios
Pues, puedes ir metiendo el resultado en un array, y luego hacer un shuffle() para ordenarlos aleatoriamente:

http://www.php.net/manual/es/function.shuffle.php
  #7 (permalink)  
Antiguo 03/12/2008, 10:18
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
frasko01, olvidate del paginador, no tiene nada que ver, no tenes que tocar nada de ahí. La cookie/session la escribis en la iteración de los registros y la levantas y seteas antes, sin la posición de la pagina, al escribir el query.

Cita:
Iniciado por Ronruby Ver Mensaje
Pues, puedes ir metiendo el resultado en un array, y luego hacer un shuffle() para ordenarlos aleatoriamente:

http://www.php.net/manual/es/function.shuffle.php
De que le sirve? como ordena un query en SQL en base a un array?
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 03/12/2008, 10: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: paginación de resultados aleatorios

Lo que puedes hacer es hacer primero un select de los ids con el RAND() obtienes toda la lista de ids ya ordenada aleatoriamente, y la guardas en la sesión, posteriormente entonces haces tu consulta SELECT normal pero solo pides una parte de tu array, de la sesion, asi no importa si cambias de pagina vas a conservar el mismo orden aleatorio.

Para obtener una parte del array usa array_slice.

Saludos
  #9 (permalink)  
Antiguo 03/12/2008, 10:35
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: paginación de resultados aleatorios

Cita:
De que le sirve? como ordena un query en SQL en base a un array?
No hablo de ordenar el QUERY, sino el RESULTADO DEL QUERY.
  #10 (permalink)  
Antiguo 03/12/2008, 10:40
Avatar de frasko01  
Fecha de Ingreso: junio-2008
Mensajes: 200
Antigüedad: 16 años, 5 meses
Puntos: 3
Respuesta: paginación de resultados aleatorios

Gracias a todos....

Trataré de solucionarlo con la ayuda que me habeis proporcionado.
Ya comentaré el resultado.

Saludos
  #11 (permalink)  
Antiguo 03/12/2008, 10:52
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: paginación de resultados aleatorios

Hola:

La respuesta de GatorV (Saludos ) es exactamente la que te propuse y como te he comentado, tengo implementada en mi paginador Ajax, que por cierto, en esto de paginar resultados, he visto muchas "chapuzas"... Si repites el order by rand() en cada consulta, ese resultado será siempre distinto, pero si lo haces solo una vez para toda la tabla, en la primera consulta habría alguna espera mayor, pero en las demás serían tan rápidas que en cualquier otro tipo de consultas del tipo limit $inicio, $elementos...

Aunque si se tratase de una tabla muy dinámica (que pudiese cambiar entre una petición y la siguiente), no conozco ninguna forma realmente eficiente (ni usando el paginator)...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 14:07.