从一个持有引用记录及其作者(具有相应的唯一ID)的MySQL表中,我想选择一个随机记录。简单。MySQL - 随机“B”的随机'0123'
试想一下,虽然,我有莎士比亚报价只有各10从其他作者。
不使用任意的权重,我怎样才能得到一个随机author_id
,然后拉随机quote_id
其具有author_id
?
(我这样做在MSSQL,而且是新的MySQL和无法从随机发现随机的任何类似的情况。) (注:这是一个相对较小的表,所以Order by RAND()
是罚款)
从一个持有引用记录及其作者(具有相应的唯一ID)的MySQL表中,我想选择一个随机记录。简单。MySQL - 随机“B”的随机'0123'
试想一下,虽然,我有莎士比亚报价只有各10从其他作者。
不使用任意的权重,我怎样才能得到一个随机author_id
,然后拉随机quote_id
其具有author_id
?
(我这样做在MSSQL,而且是新的MySQL和无法从随机发现随机的任何类似的情况。) (注:这是一个相对较小的表,所以Order by RAND()
是罚款)
你必须这样做,它应该随机挑选一位作者,然后从作者报价中随机挑选一位。
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,最好的解决办法可能是将这些数据标准化为两个表格,一个用于作者,一个用于引号。
您可以先从不同的作者列表中选择一个随机作者,并将其分配给一个变量@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;
也是一个很好的答案。如果我有代表,我会赞成。 – JDV