[英]mysql join vs subqueries for multiple values
幾乎所有的帖子和答案都建議並推薦JOINS
而不是sub queries
以提高性能。 所以我試圖實現JOINS
,盡管sub queries
解決了問題。 在這里,一個學生id
在mark
表中包含多個值。
學生
id | Roll | name
=========================
1 | 1 | Smith
標記
id | std_id | sub_id | th
==================================
1 | 1 | 1 | 60
2 | 1 | 2 | 55
學科
id | title
=============
1 | Science
2 | Math
現在我的要求是在一個div中組合與每個id相關聯的多個值
Name: Smith
Science: 60
Math: 55
但是使用join
,結果是反復獲取
Name: Smith
Science: 60
Name: Smith
Math: 55
我試過GROUP BY
到std.id
,但是它僅獲取第一行的標記,這里僅是science
標記。
$result=$con->prepare(
"SELECT
student.id, student.name
subject.title AS sub,
mark.std_id,
mark.sub_id,
mark.th
FROM student
LEFT JOIN mark ON mark.std_id = student.id
LEFT 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'];
$sub=$row['sub'];
$th=$row['th']; echo"
<article id='blg_half'>
Name: $name<br/>
$sub : $th
</article>";
}
您需要GROUP BY和一個聚合函數(GROUP_CONCAT),如下所示:
SELECT
student.id, student.en_name AS name, student.class,
GROUP_CONCAT(CONCAT(subject.title, mark.th))
FROM student
LEFT JOIN mark ON mark.std_id = student.id
LEFT JOIN subject ON subject.id = mark.sub_id
WHERE student.id=:id
GROUP BY student.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.