2009-06-11 9 views
45

J'essaye de générer un entier aléatoire pour chaque rangée que je choisis entre 1 et 60 comme temporisateur.Comment obtenir mysql gamme entière aléatoire?

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

J'ai cherché et continue d'arriver à cette fonction FLOOR comme comment sélectionner un entier aléatoire dans une plage. Cela me donne un 1 pour chaque rangée. Qu'est-ce qui me manque?

Je suis sur MySQL 5.0.75

Heres le reste de la requête I belive il pourrait être un problème de nidification

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 

Répondre

80

Cela fonctionne pour moi. Votre version mysql peut-être?

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

Je suis en cours d'exécution de votre requête et il ne me donne un nombre aléatoire pour chaque rangée .... peut-être quelque chose à voir avec le nom de l'aléatoire (timer)?

0

La sortie de la fonction RAND aura toujours une valeur comprise entre 0et 1.

Essayez ceci:

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

Cela m'a donné une erreur de syntaxe. – kevzettler

+1

vous pouvez utiliser le plancher au lieu de coulée à int, la coulée utilise rond. –

0

Vous pouvez augmenter le nombre multiplié par le nombre d'enregistrements dans le tableau.

SELECT id, 

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