【问题标题】:Mysql Select random rows to n timesMysql 选择随机行到 n 次
【发布时间】:2014-12-09 06:30:21
【问题描述】:

我想从我的表中随机获取 3 条记录到 90 次。

场景

  user_id     number_of_bids 
    12              20
     8               40
     6               30

我想要的是...以随机顺序获取3行以上的特定数字实际上是sum(number_of_bids)...

并且每一行的重复次数不得超过其出价次数..

我创建了一个查询,其中我得到了 number_of_bids 的总和。现在需要第二个查询,其中这 3 条记录应以随机顺序排列到 sum(number_of_bids) 次,并且每条记录的重复次数不应大于其 number_of_bids

不确定是否可以在一次查询中实现。但是你们是专家,我相信您可以帮助我。这将节省我的执行时间.. 谢谢..

【问题讨论】:

  • 你真的需要那么多行吗?如果您只是想以随机加权顺序获取 user_id,以便它们更有可能根据 number_of_bids 出现在顶部,那么您可以查看类似这篇文章的加权结果:stackoverflow.com/questions/2417621/…
  • 是的,因为我正在尝试编写一个 cron 作业,它将以随机顺序出价。所以我不希望任何用户错过他的出价。

标签: php mysql random


【解决方案1】:

我只是从行中构建一个数组并打乱它:

$stmt = $db->query('SELECT user_id, number_of_bids FROM table_name', PDO::FETCH_KEY_PAIR);
$results = array(); $startIndex = 0;
foreach ($stmt as $userId => $numberOfBids) {
    $results += array_fill($startIndex, $numberOfBids, $userId);
    $startIndex += $numberOfBids;
}
shuffle($results);

然后,您可以随意迭代$results

【讨论】:

  • 这个数组将包含 90 条记录?另外 $results 不应该 $results=array();
  • @AsifAsghar 您的意思是基于您问题中的给定表格?是的,应该。
  • @AsifAsghar "另外 $results 不应该 $results=array();" ..你是什么意思?
  • 谢谢..在您的代码的帮助下我已经弄清楚了。但这不可能仅通过查询?
  • 据我所知 MySQL 不太适合做这样的事情。
猜你喜欢
  • 2020-07-26
  • 2017-01-13
  • 2021-02-24
  • 2010-11-19
  • 2011-09-26
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多