MySQL - 选择顶部后如何选择随机?

Posted

技术标签:

【中文标题】MySQL - 选择顶部后如何选择随机?【英文标题】:MySQL - How to select random after select top? 【发布时间】:2013-06-17 15:10:40 【问题描述】:

我有一个这样的查询:

SELECT Id, Name, image, price, view FROM estore.product ORDER BY view DESC LIMIT 9

我想在该查询中随机选择 5 条记录。我试过了,但这段代码不起作用:

SELECT Id, Name, Image, Price, View FROM (
    SELECT Id, Name, Image, Price, View FROM estore.product ORDER BY View DESC LIMIT 9) 
    ORDER BY RAND() LIMIT 5

我该怎么办?感谢收看?

【问题讨论】:

编辑旁注:在您的代码中使用four-space indentation 而不是使用this :) 【参考方案1】:

必须命名子查询。试试:

LIMIT 9) as SubQueryAlias ORDER BY RAND() 
        ^^^^^^^^^^^^^^^^^^

【讨论】:

【参考方案2】:

你可能想去阅读这个帖子 Multiple rows alternative for RAND()

如果您的表非常大(并且它可能最终会成为产品表非常大),则 rand() 限制是一个非常慢的查询

【讨论】:

从查询中可以看到最多有9行会按照rand()排序 再看一下子查询中的limit子句 是的,我看到了 9 :),但它并没有改变它作为查询的缓慢/昂贵。 我刚启动 mysql,所以这次我需要运行我的程序。【参考方案3】:
SELECT Id, Name, Image, Price, View FROM estore.product ORDER BY RAND() LIMIT 5

(使用子查询进行排序和限制相同的选择是疯狂的......)

【讨论】:

以上是关于MySQL - 选择顶部后如何选择随机?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中选择前三行

如何获得mysql随机整数范围?

通过 JPA 随机选择行

挑战:如何在随机或任意选择客户名称时列出与客户名称相关的所有信用卡

如何从字段mysql中选择前20个字符后的字符

如何“捕捉”到RefEdit选择的顶部