jump to navigation

mySQL y los registros aleatorios, rand() febrero 20, 2006

Posted by NaXo in Bases de datos, mySQL, PHP, Programación.
24 comments

Se trata de un concepto bastante sencillo, pero en vez de apuntarmelo en un papel o en un txt de los que tengo ya mil, prefiero dejarlo por aquí.
😀

Muchas veces queremos obtener un listado de registros aleatorio, por ejemplo, para mostrar una serie de imágenes y que no salgan siempre las mismas, para alternar el orden en el blogroll de tu blog, etc…

Supongamos que queremos mostrar 10 registros aleatorios. Lo más intuitivo sería utilizar la siguiente consulta:

$sql = «SELECT * FROM blogroll ORDER BY rand() LIMIT 10»;

La realidad es que con este método no se genera una lista ta aleatoria tal y como uno desearía. Sin embargo, combinándolo con PHP, existe una alternativa sencilla que utiliza la funcion time() y devuelve un resultado realmente aleatorio:

$sql = «SELECT * FROM blogroll ORDER BY rand(» . time() . » * » . time() . «) LIMIT 10»;

NOTA: Este método es válido para búsquedas en las que el número de registros no es muy elevado. En caso contrario, es aconsejable usar otra alternativa, que ya comentaré en detalle en otro momento. Por ahora, baste decir que si realizaramos una consulta para listar 10 registros aleatorios en una tabla con 5000 filas, utilizando el primer método se generarían 5000 números aleatorios entre los que, posteriormente, habría que buscar los 10 más pequeños. Imaginen el coste.

[ Vía: scriptygoddess ]