Mysql 然后限制RAND而不是RAND然后限制

Mysql 然后限制RAND而不是RAND然后限制,mysql,limit,random,Mysql,Limit,Random,我正在使用全文搜索来提取行。 我根据分数对行进行排序(按分数排序),然后在前20行(限制20行)中,我希望对结果集进行rand(rand) 因此,对于任何特定的搜索词,我想随机显示前20个结果中的5个 我的解决方法是基于代码的——我将前20名放入一个数组,然后随机选择5名 有没有sql方法可以做到这一点?您可以使用内部选择来实现这一点。在内部选择框中选择前二十行。在“外部”中,随机选择这些行并选择前五行: SELECT * FROM ( SELECT * FROM table1

我正在使用全文搜索来提取行。
我根据分数对行进行排序(按分数排序),然后在前20行(限制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

对于MySQL中的每一行,RAND的计算是否有所不同?(我这样问是因为在SQL Server中,您必须使用NEWID)+1另一种解决方法是双嵌套查询(@gbn:是的)@gbn:
ORDER BY RAND()与LIMIT相结合,用于从一组行中选择随机样本,从没有键的20行中排序,用户可能不会注意到,另外,您不会将未使用的行发送给客户端。如果有21个人具有相同的高分,则可能永远不会显示第21个人。取消内部限制会更公平,但会降低性能。只是想一想。你可以告诉他们,为了保证在墙上有一席之地,他们需要打破高分。