MySQL - 来自随机'B'的随机'A'

时间:2011-12-14 04:48:55

标签: mysql random

从包含引文记录及其作者的MySQL表(带有相应的唯一ID),我想选择一个随机记录。简单。

想象一下,我有来自莎士比亚的 100 引用,而其他作者只有 10

如果不使用任意加权,我如何获得随机author_id然后拉出具有quote_id的随机author_id

(我是在MSSQL中这样做的,但我是MySQL的新手,无法找到任何类似 Random from Random 的情况。) (注意:这是一个相对较小的表,所以Order by RAND()很好。)

2 个答案:

答案 0 :(得分:0)

你必须这样做,它应该随机选择一位作者,然后从那位作者引用随机选择一位。

select quotes.* 
  from quotes, 
       (select author 
          from quotes 
         group by author 
         order by rand() 
         limit 1) random_author 
 where quotes.author=random_author.author 
 order by rand() limit 1;

Ps,最佳解决方案可能是将这些数据规范化为两个表,一个用于作者,一个用于报价。

答案 1 :(得分:0)

您可以先从不同的作者列表中选择一个随机作者,然后将其分配给变量@randomAuthor。这样可以实现均匀分布。然后,只需从该作者中选择一个引用即可。这可能不是最有效的方法,但至少它会起作用。

SET @randomAuthor
      = (SELECT DISTINCT author_id
           FROM quotes
           ORDER BY RAND()
           LIMIT 1);

SELECT quote_id
  FROM quotes
  WHERE author_id = @randomAuthor
  ORDER BY RAND()
  LIMIT 1;