MySQL RAND() 僅回傳 0-1 浮點數,無參數版本。需求:產生任意區間 [x, y] 隨機整數(如瀏覽量作弊 +234~5678)。本文給出通用公式推導與實戰應用。
ROUND(RAND() * (y - x) + x)
[x, y],例 [234, 5678][0, y-x] → [0, 5444][0, 1]:除以 (y-x) → RAND() * (y-x)RAND() * (y-x) + xROUND(...) 或 FLOOR(...)rand(x, y) -- 假設支援雙參數
= rand(0, y-x) + x
= rand(0/(y-x), (y-x)/(y-x)) * (y-x) + x
= rand() * (y-x) + x
UPDATE articles SET views = views + ROUND(RAND() * (5678 - 234) + 234);
SELECT ROUND(RAND() * (500 - 100) + 100); -- 回傳毫秒數
UPDATE users SET bucket = FLOOR(RAND() * 10); -- 0-9
mt_rand(x, y) 直接支援雙參數一個簡單的數學變換 rand() * (y-x) + x,將內建 0-1 隨機數映射到任意業務區間。**降低需求到現有能力可及範圍**,是演算法設計的基本功。