php - 在 MySQL 中选择 n 个组的随机子集

标签 php mysql sql random

我有一个 MySQL 表 players,我尝试将所有玩家随机放入 n 个组 (n>=2),其中每个组都有确定但可变的大小。

示例时间:

将表 players 中的 10,000 行分为 3 个组,其中 A 组包含 5,000 名玩家,B 组包含 3,000 名玩家,C 组包含 2,000 名玩家。

另一个例子可能是:

将表 players 中的 10.000 行分为 4 个组,其中 A 组包含 3.000 名玩家,B 组包含 3.000 名玩家,C 组包含 2.000 名玩家,D 组包含 2.000 名玩家。

现在我的问题:
我应该在 PHP 还是 MySQL 中执行此操作? (我认为 MySQL 可能会更快)
在 MySQL 中是否有更好(更有效)的方法来执行此操作,而不是为每行生成随机数并按该随机数对行进行排序,然后使用 OFFSET 和 LIMIT 来选择行?

最佳答案

我认为最有效、最简单的方法是运行此查询:

SELECT * FROM players
ORDER BY rand()

然后在几个 PHP FOR 循环中迭代结果(每组一个)。

这样,您将只运行一个查询,并迭代一次结果(无论如何,这是您实际上必须做的事情)。

关于php - 在 MySQL 中选择 n 个组的随机子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582134/

相关文章:

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

PHP/MySQL 数据库连接优先级?

sql - SQL中union和union all有什么区别?

php - Laravel 根据另一个字段的值验证该字段

php - 在 PDO/MySQL 中获取同一行的下一列的下一个元素?

mysql - 单个数据库最大表数

MySQL 查询在 Workbench 中有效,但 hibernate 抛出 MySQLSyntaxErrorException

sql - bigint 表示的最大值

sql - T-SQL 获取层次结构中的根节点

php - 从 Google Drive 流式传输视频