2016-07-07 56 views
0

學生表:加入表結果單獨列

(student_id(PK),student_name,subject_enrolled(FK)) 

教師表:

(teacher_id(PK),teacher_name,subject_teaches(FK)) 

主題表:

(subject_id(PK),subject_name) 

何W能我把正確的連接表查詢此,這樣它將容納5名教師爲不同的列這樣的:

(student_name,teacher_name1,teacher_name2,teacher_name3,teacher_name4,teacher_name5)

(源於相同subject_enrolled和subject_teaches)

+0

你能更新例子嗎?.....你的問題對我們來說並不清楚。 –

回答

0

當你添加php標記iam使用php分裂教師姓名列。檢查我的代碼

$conn = mysqli_connect(servername, dbusername, dbpassword,database); 
$query=mysqli_query($conn,"SELECT students.student_name,GROUP_CONCAT(teachers.teacher_name) FROM students JOIN teachers WHERE teachers.subject_teaches = students.subject_enrolled GROUP BY students.student_id"); 
    while($row=mysqli_fetch_array($query)){ 
$student[]=$row["student_name"]; 
$teacher[]=$row["GROUP_CONCAT(teachers.teacher_name)"]; 
    } 
    echo'<table><tr><th>Student name</th><th>Teacher name1</th><th>Teacher name2</th><th>Teacher name3</th><th>Teacher name4</th><th>Teacher name5</th>  </tr>'; 
    $sidebar2 = new MultipleIterator(); 
     $sidebar2->attachIterator(new ArrayIterator($student)); 
     $sidebar2->attachIterator(new ArrayIterator($teacher)); 
      foreach ($sidebar2 as $value) { 
      list($studentname,$teachername) = $value; 
     $tarray=explode(",",$teachername); 
     echo"<tr><td>$studentname</td>"; 
     foreach($tarray as $teachern){ 
     echo"<td>$teachern</td>"; 
    } 
    echo'</tr>'; 
     } 
     echo'</table>'; 
0

根據您實際表,這是可能的一個SQL語句: -

SELECT s.student_name, 
     SUBSTRING_INDEX(GROUP_CONCAT(t.teacher_name ORDER BY teacher_id), ',', 1) AS teacher_name1, 
     IF(COUNT(t.teacher_id) >= 2, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(t.teacher_name ORDER BY teacher_id), ',', 2), ',', -1), NULL) AS teacher_name2, 
     IF(COUNT(t.teacher_id) >= 3, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(t.teacher_name ORDER BY teacher_id), ',', 3), ',', -1), NULL) AS teacher_name3, 
     IF(COUNT(t.teacher_id) >= 4, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(t.teacher_name ORDER BY teacher_id), ',', 4), ',', -1), NULL) AS teacher_name4, 
     IF(COUNT(t.teacher_id) >= 5, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(t.teacher_name ORDER BY teacher_id), ',', 5), ',', -1), NULL) AS teacher_name5 
FROM student s 
LEFT OUTER JOIN teacher t ON s.subject_enrolled = t.subject_teaches 
GROUP BY s.student_id 

但是我關心的是你的表的描述。你的學生表有一個student_id作爲主鍵,然後是subject_enrolled的一個字段。這表明您爲每個學生都有多個student_id,或者subject_enrolled是他們註冊的所有主題的分隔字段。

我上面的SQL假設學生ID不是主鍵,因此每個學生/學生ID可以有多行。