【问题标题】:how to divide students in sql如何在sql中划分学生
【发布时间】:2017-05-11 00:12:05
【问题描述】:

我想按学生分组并将它们存储在数据库中

students 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15.....20

示例: Total no.of students 20

每组 4 名学生(1、2、3、4 组 1 和 5、6、7、8 组 2 等.....)

然后应该创建 5 个组

我在 for 循环中犯的错误是这样尝试的。

$studentQuery = $conn->query("
select s.student_pid,i.email,s.student_email,s.student_fname,
s.student_lname,s.profile_pic from r_job_invitations i 
LEFT JOIN 
tbl_students s 
ON 
i.email = s.student_email 
where i.id_job = ".$jobID." and inv_res = 1");

$totalIndividuals    = mysqli_num_rows($studentQuery);
$groups = round($totalIndividuals/5,0,PHP_ROUND_HALF_DOWN);
   for ($j = 1; $j <= $groups; $j++) {
        for ($i = 0; $i <= $totalIndividuals; $i++) {
            $GroupsQuery = $conn->query("INSERT INTO 
                r_test_group (student_id,job_id,group_name) 
                values ('".$studentResults['student_pid']."',
                           '".$jobID."','Group'".$j." )");
        }
    }

【问题讨论】:

    标签: php mysql sql loops mysqli


    【解决方案1】:

    考虑到记录之间没有间隙

    select Concat('group',(your_col - 1 ) / 4 +  1 )
    From yourtable
    

    注意:当有间隙时,这将不起作用。如果您有差距,那么您需要为每一行生成行号,然后在我的查询中将 student_id 替换为行号。

    【讨论】:

    • 总是差距
    • @YourCommonSense - 至少在 OP 的示例中不存在 ;)
    【解决方案2】:

    您可以使用 floor 将学生 ID 转换为组 ID:

    INSERT INTO r_test_group 
    (student_id,job_id,group_name) 
    SELECT student_pid, id_job, CONCAT('group', FLOOR((student_id - 1) / 4) + 1))
    FROM   tbl_students s 
    JOIN   r_job_invitations j ON j.email = s.student_email
    

    【讨论】:

    • 如果student_id 有空格怎么办?
    • 我不明白你所说的“差距”是什么意思,student_id 就像下一行 100 下一行 102 下一行 109 等等......
    【解决方案3】:

    我认为您的代码为您提供了比您正在寻找的更多的学生。在您的代码中的第一个循环中,它运行组数时间,然后在下一个 for 循环中为每个组运行,它为每个组中的所有学生运行。

     $limit = (int)($totalIndividuals/$groups);
      for($j =0; $j<$groups;)
      {
        for($i =0; $i<$totalIndividuals; $i++)
        {
    
         if($i % $limit == 0)
                  $j++;
          $GroupsQuery = $conn->query("INSERT INTO r_test_group (student_id,job_id,group_name) values ('".$studentResults['student_pid']."', '".$jobID."','Group'".$j." )");
      }
    }
    

    【讨论】:

      【解决方案4】:
      $stuData = array();
      while($studentResults = $studentQuery->fetch_array())   {
          $stuData[] = $studentResults;
      }
      $totalIndividuals    = mysqli_num_rows($studentQuery);
      $groups = round($totalIndividuals/$gd_individuals,0,PHP_ROUND_HALF_DOWN);
      $count=0;
      for($j = 0; $j<$groups; $j++)   {
          for($i =0; $i< $gd_individuals; $i++)   {
              if($stuData[$count]['student_pid']) {
                  echo "INSERT INTO r_test_group (student_id,job_id,group_name) values (".$stuData[$count]['student_pid'].", ".$jobID.",Group".$j." )";
                  $count++;
              }
          }
      }
      exit;
      

      第一个forloop是分组。 第二个forloop是为学生划分的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        • 2017-05-11
        • 1970-01-01
        • 2022-08-03
        相关资源
        最近更新 更多