2013-04-10 15 views
0

請問我需要什麼查詢來隨機選擇JUST ONE ROW in my table?如何在MySQL中隨機選擇一行?

我曾嘗試:

SELECT * 
FROM `table` 
ORDER BY RAND() 
LIMIT 0,1; 

,它似乎非常緩慢,有時不工作。

感謝

+0

只是出於好奇...它有時不會工作? – 2013-04-10 08:04:50

回答

1

如果表很大,ORDER BY將是緩慢的。相反,您可以根據表中的行數選擇一個隨機偏移量。

SELECT * FROM table LIMIT 1 OFFSET ? 

哪裏?是一些隨機數< SELECT COUNT(*) FROM table

+0

我無法計算出使用我所有數字的這個問題的次數;-) – 2013-04-10 07:37:44

+0

這對我有效。 – Chykere 2013-04-11 07:57:45

1

您可以創建一個STORED PROCEDURE包含動態SQL獲得隨機記錄,

DELIMITER $$ 
CREATE PROCEDURE SelectOne() 
BEGIN 
    SET @rownum := (SELECT count(*) FROM TableName); 
    SET @start := (SELECT FLOOR((rand() * @rownum))); 
    SET @sql = CONCAT('SELECT * FROM TableName LIMIT ?, 1'); 

    PREPARE stmt FROM @sql; 
    EXECUTE stmt USING @start; 
    DEALLOCATE PREPARE stmt;   
END $$ 
DELIMITER ; 

感謝Jack改進:)

+0

Explosion的答案很好的實現:)爲什麼你不要在提到的愚蠢加上這個?雖然被授予,但這僅僅適合選擇一個。 – 2013-04-10 07:43:16

+1

不錯!儘管如此,我會使用'FLOOR(RAND()* @rownum)'並且讓@ rownum等於count()',否則你會餓死第一條記錄。 http://sqlfiddle.com/#!2/43948/4 – 2013-04-10 07:55:13

+0

好主意@Jack。讓我試試':)' – 2013-04-10 07:55:57