2011-02-08 24 views

Respuesta

45

Incorrecto. No puede ordenar por una columna (afaik) si lo quiere aleatorizar.

$query = 'SELECT * FROM gameids ORDER BY RAND() LIMIT 1'; 
+0

No funciona con 'rand' -' rand() 'es una función. – Piskvor

+0

@Piskvor: reescribí mi respuesta. – Marwelln

+0

+1 por ser aproximadamente 30 segundos más rápido al tipear! –

5

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 
2

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.

+0

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

+0

¿Es innnoDB o MyISAM? ¿Qué tipo es tu clave principal? ¿Tiene columnas con datos numéricos solamente? – ludesign