2009-06-11 5 views
45

타이머로 1과 60 사이에서 선택하는 각 행에 대해 임의의 정수를 생성하려고합니다.mysql 임의 정수 범위를 얻는 방법은 무엇입니까?

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

범위에서 임의의 정수를 선택하는 방법으로이 FLOOR 기능을 검색하여 계속 사용하고 있습니다. 이것은 모든 행에 대해 1을 제공합니다. 내가 무엇이 누락 되었습니까?

나는

MySQL은 5.0.75 오전을 Heres 나는 그것이

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 

답변

80

이것은 저에게 효과적입니다. 귀하의 MySQL 버전 어쩌면?

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

내가 당신의 쿼리를 실행 해요 중첩 문제가 될 수 있으며 그것이 나에게 임의의 번호를 알려 않습니다 보라 쿼리의 나머지 각 행에 .... 아마도 무작위 (타이머)의 이름과 관련이 있습니까?

0

RAND 함수의 출력은 항상 0 1 사이의 값이 될 것이다.

이 시도 :

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

이로 인해 구문 오류가 발생했습니다. – kevzettler

+1

int로 캐스팅하는 대신 floor를 사용할 수 있으며, 캐스팅은 라운드를 사용합니다. –

0

당신은 테이블의 레코드 수를 곱한 수를 늘릴 수 있습니다.

SELECT id, 

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