Php 根据成绩从数据库中随机分组学生
我有一张30名学生的桌子,成绩从1到5。如何将随机抽取的5名学生分成6个不同的学生组?每个小组必须有五名学生,这五名学生必须有不同的年级 第一组: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
学生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个”的问题表明了这种需求是多么普遍,问题是如何解决的。