2011-12-14 57 views
1

从一个持有引用记录及其作者(具有相应的唯一ID)的MySQL表中,我想选择一个随机记录。简单。MySQL - 随机“B”的随机'0123'

试想一下,虽然,我有莎士比亚报价只有各10从其他作者。

不使用任意的权重,我怎样才能得到一个随机author_id然后拉随机quote_id其具有author_id

(我这样做在MSSQL,而且是新的MySQL和无法从随机发现随机的任何类似的情况。) (注:这是一个相对较小的表,所以Order by RAND()是罚款)

回答

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,最好的解决办法可能是将这些数据标准化为两个表格,一个用于作者,一个用于引号。

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; 
+0

也是一个很好的答案。如果我有代表,我会赞成。 – JDV