2010-09-15 80 views
1

我使用以下代碼從表中返回一個隨機行。使用字段'rand'。使用隨機索引和RAND提取隨機行()

INSERT INTO imgs SET rand = RAND() 

出於某種原因,結果雖然改變每次運行都具有非常低的「蘭特」只排場:

SELECT * 
FROM imgs 
WHERE rand > RAND() 
ORDER BY rand ASC 
LIMIT 1 

字段「蘭特」是由MySQL在創建使用類似的東西產生。絕對有超過7000行的完整範圍。如果我用'WHERE rand> [0-1之間的數字''替換'WHERE rand> RAND()',接縫工作正常'

+0

除了處理100K +行時不能很好地擴展,爲什麼不只是使用'ORDER BY RAND()'? – 2010-09-15 19:46:22

+0

我正試圖爲需要定期將我的共享服務器推向極限的客戶開發一個非常優化的系統。 顯而易見的解決方案是在php中生成隨機float,但在SQL語句中,接口更符合邏輯。 – 2010-09-15 21:30:03

回答

0

RAND()生成浮點值x其中0 < = x < = 1.0 .. 。生成一個更大的數字(整數)使用FLOOR(y + (RAND() * z))這將產生一個值x其中y < = x <(y + z)

+0

我知道。問題出於某種原因,在'WHERE'的背景下,它沒有縫合以正確生成0-1之間的浮點數。 RAND()用於在插入階段生成列 – 2010-09-15 21:27:04