2016-12-26 37 views
0

我要劃分學生分組方式,並將它們存儲在數據庫如何劃分學生在SQL

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組和第2組5,6,7,8等等.....)

那麼就應該有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.")"); 
     } 
    } 

回答

1
$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; 

第一for循環是分裂的基團。 Second forloop是爲學生分配。

1

考慮有記錄之間沒有間隙

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

注:這將工作的時候有差距。如果你有空白,那麼你需要爲每一行生成行號,然後用我的查詢中的行號替換student_id

+3

有*總是*空格 –

+0

@YourCommonSense - 至少在OP的例子中不存在;) –

1

你可以使用地板的學生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 
+0

如果'student_id'有間隙怎麼辦? – GurV

+0

我不明白你是什麼意思的「差距」的student_id就像100下一行102下一行109等.... – Abid

1

我覺得你的代碼給你更多的學生,那麼你正在尋找。在第一個循環中的代碼中,它運行的是組的數量,然後是每個組中的下一個循環,以便爲每個組中的所有學生運行循環。

$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.")"); 
    } 
}