請問我需要什麼查詢來隨機選擇JUST ONE ROW in my table?如何在MySQL中隨機選擇一行?
我曾嘗試:
SELECT *
FROM `table`
ORDER BY RAND()
LIMIT 0,1;
,它似乎非常緩慢,有時不工作。
感謝
請問我需要什麼查詢來隨機選擇JUST ONE ROW in my table?如何在MySQL中隨機選擇一行?
我曾嘗試:
SELECT *
FROM `table`
ORDER BY RAND()
LIMIT 0,1;
,它似乎非常緩慢,有時不工作。
感謝
如果表很大,ORDER BY
將是緩慢的。相反,您可以根據表中的行數選擇一個隨機偏移量。
SELECT * FROM table LIMIT 1 OFFSET ?
哪裏?
是一些隨機數< SELECT COUNT(*) FROM table
我無法計算出使用我所有數字的這個問題的次數;-) – 2013-04-10 07:37:44
這對我有效。 – Chykere 2013-04-11 07:57:45
您可以創建一個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改進:)
Explosion的答案很好的實現:)爲什麼你不要在提到的愚蠢加上這個?雖然被授予,但這僅僅適合選擇一個。 – 2013-04-10 07:43:16
不錯!儘管如此,我會使用'FLOOR(RAND()* @rownum)'並且讓@ rownum等於count()',否則你會餓死第一條記錄。 http://sqlfiddle.com/#!2/43948/4 – 2013-04-10 07:55:13
好主意@Jack。讓我試試':)' – 2013-04-10 07:55:57
只是出於好奇...它有時不會工作? – 2013-04-10 08:04:50