Comunidad de diseño web y desarrollo en internet online

Order By rand() y Limit

Citar            
MensajeEscrito el 18 Mar 2012 10:44 pm
Tengo un problemilla con la forma de ordenar una consulta hecha con php y mysql.

Vereis tengo una consulta ordenada de forma aleatoria utilizando Order By rand() pero esta consulta esta paginada así que cuando cambio de página me la vuelve a ordenar aleatoriamente con lo cual me repite registros y otros no me los saca, se que puedo utilizar un número entero entre las parentesis(), pero si lo hago siempre me sacara el mismo desorden por decirlo de alguna manera, así que necesito que ese número cambie cada vez que entro en mi página y se mantenga mientras cambio con la paginación. Lo he intentado de la siguiente manera:
lo primero he creado la variable $numero

Código PHP :

<?php 
$numero=rand(1, 50); 
?>

y lo segundo he colocado dicha variable entre los parentesis del Order by Rand('.$numero.')

Código PHP :

$sql .= ' ORDER BY rand('.$numero.') '; //' ORDER BY NombreComer ASC '; 
$sql .= 'LIMIT ' . (($pagination->get_page()- 1) * $records_per_page) . ', ' . $records_per_page . ''; 

Lo que ocurre es que el problema basicamente es el mismo ya que cada vez que cambio la paginación dicha variable cambia tambien y me repite resultados y algunos no los saca,.
Resumo: lo que quiero decir es que el número aleatorio que le paso a la variable $numero no cambie mientras navego por las paginas utilizando la paginación y cambie cuando refresco la página o cuando entro en ella.

A ver si me podeis hechar un cable, bueno un saludo a tod@s.

Por Ra120354

12 de clabLevel



 

msie8
Citar            
MensajeEscrito el 19 Mar 2012 12:15 pm
Pues es evidente que hacerlo así no te va a resultar.

Suena extraño que quieras paginar un listado que es inherentemente aleatorio. Tu problema visto así no tiene solución. Lo que podrías hacer es crear una tabla temporal que guarde el índice primario de la tabla que quieres mostrar desordenada. Y usar esa tabla para hacer el listado paginado.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Mar 2012 08:33 am
Gracias DriverOp.
No es extraño ya que lo que pretendo al ser un listado de clientes es que salgan cada vez que entro en la página aleatoriamente con el fín de que no salgan siempre los mismos al principio, como hay muchos necesito la paginación para desplazarme por las diversas páginas y como ya comente el problema es que al desplazarme con la paginación vuelve a reorganizar toda ni consulta de forma aleatoria y me repite algunos y otros no los saca.

Si entre el parentesis de rand(n) pongo un número cualquiera me los saca como yo quiero y me puedo desplazar con la paginación sin que me repita ninguno, el problema es que siempre me saca el mismo orden aleatorio es por eso que necesito que cada vez que entro en la página o refresque la misma ese número cambie y se mantenga mientras me desplazo con la paginación, como ya dije cambie el número por una variable y lo que ocurre es que esa variable cambia cada vez que me desplazo con la páginacióny lo que necesito es que no cambie hasta que vuelva a entrar en la página o la refresque y eso es lo que no se hacer.

Lo de la tabla que me guarde el indice primario no lo habia pensado, si no encuentro solución lo tendre que hacer de esa forma.

Un saludo.

Por Ra120354

12 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Mar 2012 10:51 am
Te lo han pedido asi?? Que raro. Si es idea tuya, te sugiero que evites hacer eso por el bien del usuario.

Por edge

57 de clabLevel



Genero:Masculino  

Software developer

chrome
Citar            
MensajeEscrito el 20 Mar 2012 12:26 pm
Amigo. Todo el concepto es una mala idea. Los clientes no deben mostrarse desordenados. Es antiintuitivo. El usuario espera que el listado tenga un orden lógico de forma tal que pueda intuir dónde puede estar el cliente que le interesa. Por ejemplo si lo muestras ordenado por apellido y al usuario le interesa uno cuyo apellido empieza con Z, intuitivamente sabrá que podría estar en la última página. Lo que logras con lo que pretendes hacer es que el usuario pierda el tiempo recorriendo todo el listado a ver si por casualidad encuentra el que le interesa.

Lo que yo haría es mostrar el listado ordenado por apellido pero darle la posibilidad al usuario de reordenar el listado por las columnas que se están mostrando, que pueda ordenarlo por nombre, o por ciudad de residencia, o por el saldo, o por el número de cliente o el número de inscripción en impuestos. Y además ponerle un buscador libre.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Mar 2012 05:18 pm
Puedes generar el orden en que se va a mostrar el listado de clientes una sola vez y lo guardas en un arreglo de una variable de sesión y luego accedes a él para la paginación en el orden que guardaste y solamente le sumas a la posición el número de ítem que muestras por página.

Además le añades la opción que te da DriverOp :)

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 18 Jul 2012 07:40 pm
Encontraste la solucion a tu problema? yo tengo exactamente el mismo problema que vos, en mi casa es una pagina con "productos" que en el home aparecen las "novedades" hasta ahora estaban ordenadas las ultimas cargadas primero, obviamente, pero ahora el cliente quiere que no sean tan novedades, sino que aleatoriamente les muestre los distintos productos que tiene, pero como tengo paginacion me pasa lo mismo que se dijo aca, se vuelve a "mezclar" el resultado y se repiten algunos productos, y si vuelvo a la primer pagina (o a la anterior) veo otros productos no los que vi anteriormente.


Espero se entienda y alguien tenga alguna ayuda o comentarios.

Gracias

Por ElTioEmmett

0 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 Jul 2012 12:21 pm
ElTioEmmett;
La respuesta está en el segundo mensaje.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.