我必须显示学生“约翰”的信息。
约翰的信息表-学生
id | Roll | name | class | year
==================================
1 | 1 | john | 7 | 2
约翰的马克表-马克
id | std_id | sub_id | th | pr
===========================================
1 | 1 | 1 | 60 | 20
2 | 1 | 2 | 55 | 18
约翰的教育年表-年
id | title
=============
1 | 2017
2 | 2018
约翰的课桌-课堂
id | title
=============
7 | Seven
8 | Eight
约翰的主题表-主题
id | title
=============
1 | Science
2 | Math
现在我的要求如下
Name: John
Class: Seven
Year: 2018
Science: 60 (TH)
Math: 55 (TH)
但是,这里有重复的结果。我得到了约翰的信息,重复地数着所有的行 mark
这个学生的table。
Name: John
Class: Seven
Year: 2018
Science: 60 (TH)
Name: John
Class: Seven
Year: 2018
Math: 55 (TH)
我试过使用 GROUP BY
到std.id,以防止重复,但它只显示标记表的第一行。在这里,只有科学马克展示过。
$result=$con->prepare(
"SELECT
student.id, student.en_name AS name, student.class,
class.title AS class,
year.title AS year,
subject.title AS sub,
mark.sub_id,
mark.th,
mark.pr
FROM student
JOIN year ON year.id = student.year
JOIN class ON class.id = student.class
JOIN mark ON mark.std_id = student.id
INNER JOIN subject ON subject.id = mark.sub_id
WHERE student.id=:id;"
) or die($con->error);
$result->bindParam(':id',$_POST['std']);
$result->execute();
while($row=$result->fetch(PDO::FETCH_ASSOC)){
$name=$row['name'];
$class=$row['class'];
$sub=$row['sub'];
$year=$row['year'];
$th=$row['th'];
$pr=$row['pr']; echo"
<article id='blg_half'>
<article class='left'>
Name: $name<br/>
Class: $class<br/>
Year: $year<br/>
$sub : $th(th)
</article>
</article>";
}
4条答案
按热度按时间nwlqm0z11#
尝试内部连接,不需要根据您的问题分组
hsgswve42#
根据你的最新问题,你实际上需要小组讨论来产生结果:
mysql应该可以使用上述sql,但是标准sql应该按select中的所有字段分组,除了group\u concat()
你也不能按…分组。。。当选择mark.id时——这毫无意义
ttygqcqt3#
试试这个
a8jjtwal4#
尝试与标记表左联接: