Foros del Web » Programando para Internet » PHP »

Paginator y order by rand()

Estas en el tema de Paginator y order by rand() en el foro de PHP en Foros del Web. Hola. Utilizo Paginator y funciona estupendamente. El único problema que tengo es que en una consulta ordenada aleatoriamente con order by rand() que da como ...
  #1 (permalink)  
Antiguo 24/02/2005, 00:44
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
Paginator y order by rand()

Hola.
Utilizo Paginator y funciona estupendamente.

El único problema que tengo es que en una consulta ordenada aleatoriamente con order by rand() que da como resultado varias páginas, al ir hacia "Siguiente" y luego volver con "Anterior", no coserva el resultado inicial.
Es decir, al presionar "Anterior", recarga la página y hace una nueva consulta, con lo que los resultados son distintos de la primera.

El código es este:
Código PHP:
$_pagi_sql = ("SELECT *FROM tabla where estado = '1' and control = '1'  order by rand()");
$_pagi_cuantos 10;
$_pagi_nav_num_enlaces 5;
$_pagi_mostrar_errores false;
$_pagi_conteo_alternativo true;
include(
"paginator.inc.php");
$fila 0;
while (
$row mysql_fetch_array($_pagi_result ) )
{
etc..
}
echo 
"<table>
<tr><td>$_pagi_navegacion</td></tr>
</table>"

Antes de tocar nada, me gustaría saber si estoy haciendo algo mal.

El caso es que al moverte por las páginas, parece que siempre se recarga la inicial, con lo que actúa order by rand(). Lo que necesitaría es que no se recargara la página y se retomara la de la cache.

Por favor, decidme algo, porque si no hay una solución tendré que quitar la ordenación aleatotia order by rand(), porque tal como está despista a los usuarios ya que: ven algo que les interesa en la página 1----->Van a página---->2---->Vuelven a página1 para seguir el link que les ha interesado. ¡Pero ya no está!.

Por lo demas, ya he dicho que Paginator va muy bien. Lo uso en todas las consultas y no da ningún problema.

Gracias a todos y saludos.
  #2 (permalink)  
Antiguo 24/02/2005, 01:18
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Es logico, cada vez que se carga la pagina se ejecuta la consulta, ejecutando otra vez el order by rand() y dando resultados diferentes.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 24/02/2005, 03:18
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
Gracias por tu respuesta

Hola.

Ahora que ya estoy seguro porque el propio autor de Paginator me lo confirma, de que la cosa es así, quiesiera preguntarte si me aconsejas tocar Paginator para que de alguna manera acepte la ordenación aleatoria.
Si puedes darme alguna pista de por donde empezar, te lo agradecería mucho.

Si me desaconsejas hacerlo, modificaré la ordenación de salida, aunque ello me obligue a introducir varias banderas en la tabla. Lo que quiero es seguir con Paginator.

En todo caso, felicidades por tu script y tómate como una simple sugerencia de mejoras para futuras versiones, este pequeño inconveniente del order by rand().

Gracias.
  #4 (permalink)  
Antiguo 24/02/2005, 03:51
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Gracias, pero no soy el creador del paginator, es obra de jpinedo.

El problema es que al cargar cada pagina de resultados, se vuelve a ejecutar la consulta de ordenacion aleatoria.

¿Cual es el objetivo de que cada usuario obtenga el resultado ordenado aleatoriamente? Quizas sabiendo su uso se puede enfocar de otra forma.

saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 24/02/2005, 06:30
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
Objetivo

Hola:

Ante todo, disculpa mi error al confundirte con jpinedo.

El objetivo es el siguiente.

-Se trata de una web que ofrece información sobre los servicios de otros.
-Aparecer en la web tiene un coste variable en función de la modalidad contratada. (Unas modalidades tienen más servicios que otras).
-Lo que no hago es posicionar los links a los clientes en la página de inicio. Ya que todos pagan, nadie tiene preferencia en la página de inicio.

Por esto quiero que el orden en que aparece cada uno sea aleatorio.
Ya sabes que muchos usuarios no pasan de la primera página cuando buscan algo. Favorecer con una ordenación predeterminada y siempre igual, no sería bueno para la web.

Bieno, pues es esto.

Si se te ocurre algo sobre cómo hacerlo, te lo agradeceré.

Cordiales saludos.
  #6 (permalink)  
Antiguo 24/02/2005, 06:47
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Siguiendo con el paginator, solo se me ocurre crear una tabla temporal copia de la original pero con los elementos desordenados (u ordenados aleatoriamente). El problema es que para cada usuario el orden debe ser el mismo mientras dure su sesion (para el caso en que retroceda).

¿Son muchos los registros a desordenar? Porque la solucion que se me ocurre seria crear en la sesion del usuario un array con los id de los registros ya desordenados, y usar ese array en la paginacion (paginas esos id y recuperas el registro de los ids de esa pagina). Pero ya tendrias que dejar el paginator.

Otra opcion seria que no fuesen aleatorios en todas las veces, sino que cambiases tu el orden automaticamente cada hora (un cronjob, y un campo adicional para alamacenar el orden). Puede que a algun usuario le pille el cambio de hora y no mantenga la coherencia al volver a la primera pagina. En este caso usarias el paginator pero ordenado por ese nuevo campo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 24/02/2005, 06:59
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 19 años, 11 meses
Puntos: 0
Hola.
Gracias por contestar tan rápido.

Los registros a mostrar son centenares o incluso miles. La primera solución que apuntas parece la buena, pero le veo dos problemas: 1.- Quizá ralentice la página (?¿?). 2.- Hay que dejar Paginator y buscar otra solución para paginar.

De momento, preferiría la segunda. Probaré a ver que tal funciona cambiando el orden cada cierto tiempo.

Gracias por todo.

Saludos.
  #8 (permalink)  
Antiguo 08/03/2006, 03:40
 
Fecha de Ingreso: marzo-2006
Mensajes: 2
Antigüedad: 18 años, 1 mes
Puntos: 0
Encontrasteis una solución?

Hola:
Tengo el mismo problema y no consigo ordenar aleatoriamente los resultados y que no se repitan en las diferentes páginas. Lo máximo que consigo es ordenar aleatoriamente los resultados de cada página, pero eso no es lo que necesito.
Teneis alguna solución al problema? Os agradecería me comentaseis.
Muchas gracias
  #9 (permalink)  
Antiguo 10/03/2006, 06:00
 
Fecha de Ingreso: marzo-2006
Mensajes: 2
Antigüedad: 18 años, 1 mes
Puntos: 0
Josemi puedes ayudarme

Josemi puedes ayudarme por favor?
No consigo encontrar la solución al problema, he dado mil vueltas pero ninguna me vale.
Alguna sugerencia?
  #10 (permalink)  
Antiguo 06/09/2006, 13:05
 
Fecha de Ingreso: mayo-2002
Ubicación: Toluca
Mensajes: 229
Antigüedad: 21 años, 11 meses
Puntos: 2
Hola...
yo tambien menejo PAGINATOR
y tengo la misma necesidad ahorita
dar un listado aleatorio, para que mis usuarios no vean siempre el mismo orden de la información
pero cada que se recarga el paginator pone aleatorio los resultados y pierde el orden

como lo puedo resolver ???

AYUDA, porfavor !!!
__________________
Gracias a Foros como este, he podido crear websites y ahora contribuyo a seguir adelante con aportaciones
www.inxenio-dixeno.com Soluciones Web
  #11 (permalink)  
Antiguo 06/09/2006, 15:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Creo la solucion ya fue dada, y es crear un array con todos los registros en "desorden" y usar ese array por el tiempo de vida que esten en la sesion.

Esto claro deberias de dejar de usar el paginator, e implementar una forma de paginar propia ;)
  #12 (permalink)  
Antiguo 06/09/2006, 17:57
 
Fecha de Ingreso: mayo-2002
Ubicación: Toluca
Mensajes: 229
Antigüedad: 21 años, 11 meses
Puntos: 2
uuppssss ... pense que podría arreglarse con una sola linea de código :o)
pero bueno ... si no queda de otra, pues tendre que ver la mejor solucion para esto .. mil gracias !!!!
__________________
Gracias a Foros como este, he podido crear websites y ahora contribuyo a seguir adelante con aportaciones
www.inxenio-dixeno.com Soluciones Web
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

SíEste tema le ha gustado a 1 personas




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