Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据成绩从数据库中随机分组学生_Php_Mysql_Greatest N Per Group - Fatal编程技术网

Php 根据成绩从数据库中随机分组学生

Php 根据成绩从数据库中随机分组学生,php,mysql,greatest-n-per-group,Php,Mysql,Greatest N Per Group,我有一张30名学生的桌子,成绩从1到5。如何将随机抽取的5名学生分成6个不同的学生组?每个小组必须有五名学生,这五名学生必须有不同的年级 第一组: 学生1(一年级)、学生2(二年级)、学生3(三年级)、学生4(四年级)、学生5(五年级)从表中提取数据,按年级对结果进行分组,这样就有了数组('grade1'=>数组('student1'、'student2'、'etc')、'grade2'=>数组('student3'、'student4'、'etc')等等)。将子阵列随机化,如下所示: fore

我有一张30名学生的桌子,成绩从1到5。如何将随机抽取的5名学生分成6个不同的学生组?每个小组必须有五名学生,这五名学生必须有不同的年级

第一组:
学生1(一年级)、学生2(二年级)、学生3(三年级)、学生4(四年级)、学生5(五年级)

从表中提取数据,按年级对结果进行分组,这样就有了
数组('grade1'=>数组('student1'、'student2'、'etc')、'grade2'=>数组('student3'、'student4'、'etc')
等等)。将子阵列随机化,如下所示:

foreach($students as $key=>$student)
{
    shuffle($students[$key]);
}
然后您可以遍历数组,这样
$group[0]
将=到
数组($students['Grade1'][0],$students['Grade2'][0],$students['Grade3'][0],等等)
,这可以通过for()循环完成

您可以使用随机化完成大部分工作,并通过以下操作限制SQL查询中的结果:

"SELECT * FROM `Students` WHERE `Grade` = 'Grade1' ORDER BY RAND() LIMIT 6"
从表格中获得该等级的6个随机排序结果。当然,这需要对每个等级进行单独的SQL查询。可能有一种方法可以在一个查询中为每个等级获得6个随机结果


我还假设同一个学生不可能在两个不同的组中,并且每个组中都有相同的学生。如果成绩参差不齐,而且他们可能在多个组中,那么你必须从年级中随机选择一名学生来填补空缺,这可以很容易地用
$students['GradeX'][mt_rand(0,count($students['GradeX'])-1]之类的东西来完成。

MySQL缺乏分析支持(即:行数)做你想做的事,但许多标有“每组最多n个”的问题表明了这种需求是多么普遍,问题是如何解决的。