Hay ocasiones en las que puede ser necesario ordenar aleatoriamente un conjunto de resultados de MySQL, por ejemplo al elegir algunos ganadores al azar para un sorteo. Este artículo explica cómo hacer esto y el próximo artículo sobre MySQL explicará cómo ordenar “aleatoriamente” los datos en varias páginas.
Usando el ejemplo del sorteo, digamos que realizamos una encuesta y vamos a dar un premio a 10 de las personas que completaron la encuesta. Estas personas van a ser elegidas al azar. La tabla se llama “encuesta” y queremos sus datos de contacto.
Para seleccionar 10 registros de la tabla en orden aleatorio, haz lo siguiente:
SELECT first_name, last_name, email_address, phoneFROM surveyORDER BY RAND()LIMIT 10
La línea ORDER BY RAND() es la que hace que el conjunto de resultados sea aleatorio, y la línea LIMIT 10 devuelve sólo los 10 primeros resultados.
Ordenar un conjunto de resultados aleatoriamente de esta manera es ineficiente y será lento en conjuntos de resultados grandes, porque el número aleatorio tiene que ser aplicado a cada fila antes de ser ordenado. Para los propósitos de elegir un ganador o circunstancias similares es muy bueno, pero no es tan útil si usted necesita paginar los resultados “al azar” a través de varias páginas.
Si usted necesita paginar los datos “al azar” usando RAND() no es muy útil porque los mismos registros aparecerán en múltiples páginas, y usted no obtendrá un conjunto de datos consistente cuando usted pague hacia atrás y hacia adelante a través de las mismas páginas. Veré cómo hacer esto en el post sobre MySQL de la próxima semana. Asegúrate de suscribirte a mi feed RSS (detalles abajo) para no perderte.