【发布时间】:2011-02-08 12:53:15
【问题描述】:
我正在使用全文搜索来提取行。
我根据分数 (ORDER BY SCORE) 对行进行排序,然后在前 20 行 (LIMIT 20) 中,我想对结果集进行 rand (RAND)。
所以对于任何特定的搜索词,我想随机显示前 20 个结果中的 5 个。
我的解决方法是基于代码的——我将前 20 个放入一个数组中,然后随机选择 5 个。
有没有 sql 方法可以做到这一点?
【问题讨论】:
我正在使用全文搜索来提取行。
我根据分数 (ORDER BY SCORE) 对行进行排序,然后在前 20 行 (LIMIT 20) 中,我想对结果集进行 rand (RAND)。
所以对于任何特定的搜索词,我想随机显示前 20 个结果中的 5 个。
我的解决方法是基于代码的——我将前 20 个放入一个数组中,然后随机选择 5 个。
有没有 sql 方法可以做到这一点?
【问题讨论】:
您可以使用内部选择来执行此操作。在内部选择中选择前二十行。在外部选择中随机排列这些行并选择前五名:
SELECT *
FROM (
SELECT *
FROM table1
ORDER BY score DESC
LIMIT 20
) AS T1
ORDER BY RAND()
LIMIT 5
【讨论】:
ORDER BY RAND() combined with LIMIT is useful for selecting a random sample from a set of rows 来自dev.mysql.com/doc/refman/5.0/en/…