0

请问我需要什么查询才能在我的表中随机选择 JUST ONE ROW?

我努力了:

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

它似乎很慢,有时不起作用。

谢谢

4

2 回答 2

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的改进:)

于 2013-04-10T07:42:15.427 回答
1

如果表很大,ORDER BY会很慢。相反,您可以根据表中的行数选择一个随机偏移量。

SELECT * FROM table LIMIT 1 OFFSET ?

?随机数在哪里<SELECT COUNT(*) FROM table

于 2013-04-10T07:36:37.840 回答