时间:2011-04-02 18:49:54

标签: php mysql greatest-n-per-group

我有30名学生的表,从1到5的成绩。如何组成6个不同的学生组,其中包含5个随机选择的学生?每组必须有五名学生,这五名学生中的每一名必须具有不同的成绩。

第一组: student1(1年级),student2(2年级),student3(3年级),student4(4​​年级),student5(5年级)

1 个答案:

答案 0 :(得分:0)

从表格中提取数据,将结果按年级分组,因此您有array('Grade1' => array('Student1','Student2','etc.'), 'Grade2' => array('Student3','Student4','etc))等等。随机化子数组,如:

foreach($students as $key=>$student)
{
    shuffle($students[$key]);
}

然后你可以浏览数组,这样$group[0]将= array($students['Grade1'][0],$students['Grade2'][0],$students['Grade3'][0],etc.),这可以通过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)]