2016-07-07 42 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可以有多行。