Resumen: en este tutorial, usted aprenderá varias técnicas para seleccionar registros aleatorios de una tabla de base de datos en MySQL.
A veces, usted tiene que seleccionar registros aleatorios de una tabla, por ejemplo:
- Seleccionar algunas entradas al azar en un blog y mostrarlas en la barra lateral.
- Seleccionar una cita al azar para mostrar el widget «cita del día».
- Seleccionar imágenes al azar en una galería y utilizarlas como imágenes destacadas.
MySQL selecciona registros al azar utilizando ORDER BY RAND()
MySQL no tiene ninguna sentencia incorporada para seleccionar filas al azar de una tabla. Para lograrlo, se utiliza la función RAND()
.
La siguiente consulta selecciona una fila aleatoria de una tabla de la base de datos:
Code language: SQL (Structured Query Language) (sql)
Examinemos la consulta con más detalle.
- La función
RAND()
genera un valor aleatorio para cada fila de la tabla. - La cláusula
ORDER BY
ordena todas las filas de la tabla por el número aleatorio generado por la funciónRAND()
. - La cláusula
LIMIT
elige la primera fila del conjunto de resultados ordenados aleatoriamente.
Si desea seleccionar N
registros aleatorios de una tabla de la base de datos, debe cambiar la cláusula LIMIT
de la siguiente manera:
Code language: SQL (Structured Query Language) (sql)
Vea la siguiente tabla customers
de la base de datos de ejemplo.
El siguiente ejemplo selecciona cinco clientes al azar de la tabla customers
:
Code language: SQL (Structured Query Language) (sql)
Pruébalo
Nota que puedes obtener un conjunto de resultados diferente porque es aleatorio.
Esta técnica funciona muy bien con una tabla pequeña. Sin embargo, será lenta para la tabla grande porque MySQL tiene que ordenar toda la tabla para seleccionar los aleatorios.
La velocidad de la consulta también depende del número de filas de la tabla. Cuantas más filas tenga la tabla, más tiempo se tarda en generar el número aleatorio para cada fila.
MySQL selecciona registros aleatorios utilizando la cláusula INNER JOIN
Esta técnica requiere que la tabla tenga un campo de clave primaria autoincrementado y que no haya ningún hueco en la secuencia.
La siguiente consulta genera un número aleatorio basado en la columna de clave primaria:
Code language: SQL (Structured Query Language) (sql)
Podemos unir la tabla con el conjunto de resultados devuelto por la consulta anterior de la siguiente manera:
Code language: SQL (Structured Query Language) (sql)
Usando esta técnica, debe ejecutar la consulta varias veces para obtener más de una fila aleatoria, ya que si aumenta el límite, la consulta sólo le dará filas secuenciales que comienzan a partir de la fila seleccionada al azar.
La siguiente consulta devuelve un cliente al azar de la tabla customers
.
Code language: SQL (Structured Query Language) (sql)
Pruébalo
MySQL selecciona registros aleatorios usando variables
En caso de que, la tabla tenga la columna id
con los valores que caen dentro de un rango 1..N
y no haya ningún hueco en el rango, puedes usar la siguiente técnica:
- Primero, selecciona números aleatorios en el rango 1..N.
- Segundo, seleccione los registros basados en los números aleatorios.
La siguiente sentencia le ayuda a lograr esto:
Code language: SQL (Structured Query Language) (sql)
Note que las variables definidas por el usuario son específicas de la conexión. Esto significa que esta técnica no se puede utilizar con la agrupación de conexiones. Además, la clave primaria debe ser de tipo entero y sus valores deben estar en la secuencia sin huecos.
En este tutorial, le hemos mostrado varias técnicas para seleccionar registros aleatorios de una tabla.
- ¿Ha sido útil este tutorial?
- SíNo