2016-12-26 3 views
0

ich Schüler gruppenweise teilen möchten, und speichern sie in der Datenbankwie teilen Studenten in SQL

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

Beispiel:Total no.of students 20

Make 4 Schüler pro Gruppe (1,2,3, 4 Gruppe1 und 5,6,7,8 group2 etc .....)

Dann sollte es 5 Gruppen erstellt

ich so versucht, wo der Fehler ich bin in for-Schleifen tun.

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

Antwort

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; 

erste forloop ist, Gruppen zu unterteilen. Zweite Forloop ist für Studenten zu teilen.

1

In Anbetracht gibt es keine Lücken zwischen den Aufzeichnungen

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

Hinweis: Dies wird nicht Arbeit, wenn gibt es Lücken. Wenn Sie Lücken haben, müssen Sie für jede Zeile eine Zeilennummer generieren und dann die Zeile student_id mit der Zeilennummer in der Abfrage ersetzen.

+3

Es gibt * immer * Lücken –

+0

@YourCommonSense - naja zumindest nicht im OP-Beispiel vorhanden;) –

1

könnten Sie Bodenbelag verwenden, um einen Schüler-ID zu einer Gruppe-ID zu übersetzen:

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

Was passiert, wenn die 'student_id' Lücken hat? – GurV

+0

Ich verstehe nicht, was meinst du mit "Lücken" die Student_id's sind wie 100 nächste Zeile 102 nächste Zeile 109, etc .... – Abid

1

Ich denke, Ihr Code, den Sie mehr Schüler geben dann für Sie suchen. in Ihrem Code in der ersten Schleife läuft es für die Anzahl der Gruppen Zeit dann für jede Gruppe in der nächsten Schleife läuft für alle Schüler in jeder Gruppe.

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