Duplicar posibles:
How to request a random row in SQL?Mysql 1 Random Fila
es esta la forma correcta de hacer esto?
$query = 'SELECT * FROM gameids ORDER BY timestamp RAND LIMIT 1';
Duplicar posibles:
How to request a random row in SQL?Mysql 1 Random Fila
es esta la forma correcta de hacer esto?
$query = 'SELECT * FROM gameids ORDER BY timestamp RAND LIMIT 1';
Incorrecto. No puede ordenar por una columna (afaik) si lo quiere aleatorizar.
$query = 'SELECT * FROM gameids ORDER BY RAND() LIMIT 1';
No es necesario decirle a ella que la columna de manera aleatoria, pero sí es necesario ()
después RAND
porque es una función.
SELECT
*
FROM
gameids
ORDER BY
RAND()
LIMIT 1
RAND es una función y no es efectiva en las tablas grandes, porque no usa índices.
$query = 'SELECT * FROM gameids ORDER BY RAND() LIMIT 1';
Una posible solución es añadir la columna llamada random
y en cada disco generar números aleatorios para ello, a continuación, cuando se está consultando la base de datos, ordenado por esta columna y obtendrá pseudo-aleatorio, pero esta vez utilizando los índices
$query = 'SELECT * FROM gameids ORDER BY timestamp, random LIMIT 1';
Editar: También puede hacer RAND()
más "flexible" mediante la aplicación de una expresión como esta RAND() * MAX(numeric_column_name)
Si usted está interesado en optimizaciones, echar un vistazo a esta entrada del blog: http://jan.kneschke.de/projects/mysql/order-by-rand/
@Marwelln es correcto.
Bueno, esta es una base de datos muy grande, ¿hay alguna forma de obtener el total de filas y luego generar un número aleatorio para ordenar? – AndrewFerrara
¿Es innnoDB o MyISAM? ¿Qué tipo es tu clave principal? ¿Tiene columnas con datos numéricos solamente? – ludesign
No funciona con 'rand' -' rand() 'es una función. – Piskvor
@Piskvor: reescribí mi respuesta. – Marwelln
+1 por ser aproximadamente 30 segundos más rápido al tipear! –