【问题标题】:MYSQL Query - order by and then select random of the same valueMYSQL 查询 - 排序然后选择相同值的随机数
【发布时间】:2015-08-05 16:48:25
【问题描述】:

我目前正在 MySQL 中按价格排序结果,然后输出价格最高的随机结果。 (几家价格一样)

我查看了其他 stackoverflow 问题,发现有人回答说如果两个结果相同,您无法保证会输出哪个结果,但这听起来有点小故障/黑客,无论如何按最高结果排序表格,然后从这些结果中随机选择一个?

$qry="SELECT * FROM campaignInformation ORDER BY campaignInformation.bidPerCustomer DESC LIMIT 1";

我的两个“bidPerCustomers”是 0.25,我想每次都随机选择一个,但不要选择一个下注为 0.11 的例子

提前谢谢各位! 我假设我将不得不进行查询,然后从结果中随机选择一个,但是如果我可以在查询开始时这样做会很好。

【问题讨论】:

  • ORDER BY campaignInformation.bidPerCustomer DESC,RAND() LIMIT 1 不起作用?
  • 不可能只使用limit,因为它不关心结果是什么,只需要其中一个。
  • @Jeremy 我从来没有尝试过,我会快速尝试一下,但是我假设您每次查询只能有一个订单
  • 不,您可以使用多个订单:ORDER BY field1 ASC, field2 DESC, ....

标签: php mysql random sql-order-by


【解决方案1】:

如果您只想从具有最大值的那些中选择任何一个,那么您可以干净地构建它:

SELECT * FROM campaignInformation C WHERE C.bidPerCustomer = ( 
    SELECT MAX(D.bidPerCustomer) FROM campaignInformation D
)

这将使您获得所有具有最大值的行。然后,您可以从该表中选择一个,LIMIT 1,按 RAND() 排序

SELECT * FROM (
    SELECT * FROM campaignInformation C WHERE C.bidPerCustomer = ( 
        SELECT MAX(D.bidPerCustomer) FROM campaignInformation D
    )
) AS X
ORDER BY RAND()
LIMIT 1

每个派生表都需要一个别名,因此是“AS X”

确保您的 bidPerCustomer 列上有索引,否则会发生严重后果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多