从包含引文记录及其作者的MySQL表(带有相应的唯一ID),我想选择一个随机记录。简单。
想象一下,我有来自莎士比亚的 100 引用,而其他作者只有 10 。
如果不使用任意加权,我如何获得随机author_id
,然后拉出具有quote_id
的随机author_id
?
(我是在MSSQL中这样做的,但我是MySQL的新手,无法找到任何类似 Random from Random 的情况。)
(注意:这是一个相对较小的表,所以Order by RAND()
很好。)
答案 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;