sábado, marzo 10, 2007

Google
 

Problemas con Order By Rand() mysql


El otro día vi con horror como en una pagina web que llevo, se mostraba un error mysql en una de las paginas php ademas de que tardaba mucho en cargar.
Despuedes de darle algunas vueltas al codigo , llegue a la conclusion de lo que estaba ocurriendo era que la consulta duraba demasiado y por eso devolvia el error, ¿pero donde estaba el fallo? pues en SELCT * FROM imagenes ORDER BY Rand() LIMIT 1 , esta consulta que yo usaba para generar una imagen aleatoria cada vez que se recarga la pagina tarda demasiado y casca, parece ser al hacer esa consulta obligamos a php a generar un numero aleatorio distinto para cada fila de la tabla, y aun que en mi caso tampoco eran tantos (150 registros), supongo q son suficientes si coincide que entran varias personas a la vez y petan el servidor.
Sin embargo la solucion es bien sencilla, simplemente hay que generar un unico numero aleatorio, como ya se que mi tabla tiene 150 registros , genero un numero entre 1 y 150 simplemente con rand(1,150), esto lo almaceno en $aleat y se lo paso a la query.
SELECT * FROM imagenes WHERE id=$aleat, y pista. Va bien rapido.

Etiquetas: , , , ,

2 Comentarios:

At 8:58 PM, Anonymous masd said...

Si pero no...

Jejeje, es una buena solucion, pero no es la correcta.

Con la consulta que estas haciendo corres el riesgo de que si por algun motivo has borrado un registro y el numero aleatorio es igual a ese registro, pues bueno, no tendras ningun resultado...

Yo estoy en busca a la solucion de ese problema, ya que estoy programando un sistema q me da un dato aleatorio y aun no encuentro la mejor solucion... en cuanto tenga alguna respuesta la posteo aqui.. bye bye

 
At 8:52 PM, Anonymous Anónimo said...

Se me ocurre:

select count(*) n from tabla

$num = random entre 0 y (n-1)

select * from tabla
order by id
limit $num , 1

 

Publicar un comentario en la entrada

Enlaces de este post:

Crear un enlace

<< Home