【问题标题】:How do I randomly select ONE row in MySQL? [duplicate]如何在 MySQL 中随机选择一行? [复制]
【发布时间】:2013-04-01 22:16:48
【问题描述】:

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

我试过了:

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

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

谢谢

【问题讨论】:

  • 只是出于好奇......它有时怎么会不起作用?

标签: mysql


【解决方案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改进:)

【讨论】:

  • Explosion 的回答很好的实现 :) 你为什么不在上面提到的骗子上添加这个?虽然是理所当然的,但这仅适用于准确选择一个。
  • 不错!不过,我会使用FLOOR(RAND() * @rownum) 并让@rownum 等于count(),否则你会饿死第一条记录。 sqlfiddle.com/#!2/43948/4
  • 好主意@Jack。让我试试:)
  • 哦,当然,应该提到一个简单的COUNT(*)在使用InnoDB时有不同的运行时:)
  • @Jack 我添加了你对答案的改进:)
【解决方案2】:

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

SELECT * FROM table LIMIT 1 OFFSET ?

? 是一个随机数 SELECT COUNT(*) FROM table

【讨论】:

  • 我数不清用我所有的数字问这个问题的次数 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2018-04-03
  • 2015-11-09
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2012-02-05
相关资源
最近更新 更多