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