2009-06-11 18 views
45

Estoy tratando de generar un entero aleatorio para cada fila que selecciono entre 1 y 60 como temporizador.¿Cómo obtener el rango entero al azar de mysql?

SELECT downloads.date, products.*, (FLOOR(1 + RAND() * 60)) AS timer 

He buscado y sigo viniendo a esta función FLOOR como la forma de seleccionar un entero aleatorio en un rango. Esto me da un 1 por cada fila. ¿Qué me estoy perdiendo?

estoy en MySQL 5.0.75

Aquí está el resto de la consulta me creer que podría ser un problema de anidación

SELECT * 
FROM (
SELECT downloads.date, products.*, FLOOR(1 + (RAND() * 60)) AS randomtimer, 
(
SELECT COUNT(*) 
FROM distros 
WHERE distros.product_id = products.product_id 
) AS distro_count, 

(SELECT COUNT(*) FROM downloads WHERE downloads.product_id = products.product_id) AS true_downloads 

FROM downloads 
INNER JOIN products ON downloads.product_id = downloads.product_id 
) AS count_table 
WHERE count_table.distro_count > 0 
AND count_table.active = 1 
ORDER BY count_table.randomtimer , count_table.date DESC LIMIT 10 

Respuesta

80

Esto funciona para mí. ¿Tu versión de mysql quizás?

SELECT id, (FLOOR(1 + RAND() *60)) AS timer 
FROM users 
LIMIT 0 , 30 
2

estoy de ejecutar la consulta y no me dan un número aleatorio para cada fila .... tal vez tiene algo que ver con el nombre del azar (temporizador)?

0

La salida de la función RAND siempre habrá un valor entre 0 y .

Prueba esto:

SELECT downloads.date, products.*, (CAST(RAND() * 60 AS UNSIGNED) + 1) AS timer 
+0

Esto me dio un error de sintaxis. – kevzettler

+1

puede usar piso en lugar de lanzar a int, el casting se usa redondo. –

0

Puede aumentar el número multiplicado por el número de registros de la tabla.

SELECT id, 

(FLOOR((SELECT MIN(id)      FROM your_table) + RAND() * 1000000)) AS timer 
FROM your_table 
LIMIT 0 , 30 
Cuestiones relacionadas