MySQL-随机“B”中的随机“A”

MySQL-随机“B”中的随机“A”,mysql,random,Mysql,Random,我想从一个MySQL表中选择一条随机记录,该表包含引用语及其作者的记录以及相应的唯一ID。简单 但是,想象一下,我引用了100段莎士比亚的名言,而其他作家的名言只有10段 在不使用任意权重的情况下,如何获取随机作者id,然后提取具有该作者id的随机引用id 我是在MSSQL中这样做的,但我是MySQL新手,在Random中找不到类似的Random。 注意:这是一个相对较小的表,所以按兰德排序是可以的。您必须这样做,它应该随机选择一位作者,然后从中随机选择一位作者 select quotes.*

我想从一个MySQL表中选择一条随机记录,该表包含引用语及其作者的记录以及相应的唯一ID。简单

但是,想象一下,我引用了100段莎士比亚的名言,而其他作家的名言只有10段

在不使用任意权重的情况下,如何获取随机作者id,然后提取具有该作者id的随机引用id

我是在MSSQL中这样做的,但我是MySQL新手,在Random中找不到类似的Random。
注意:这是一个相对较小的表,所以按兰德排序是可以的。

您必须这样做,它应该随机选择一位作者,然后从中随机选择一位作者

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;

另外,最好的解决方案可能是将此数据规范化为两个表,一个用于作者,一个用于引用。

您可以首先从不同的作者列表中选择一个随机作者,并将其分配给变量@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;