簡體   English   中英

mysql join vs子查詢的多個值

[英]mysql join vs subqueries for multiple values

幾乎所有的帖子和答案都建議並推薦JOINS而不是sub queries以提高性能。 所以我試圖實現JOINS ,盡管sub queries解決了問題。 在這里,一個學生idmark表中包含多個值。

學生

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 BYstd.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM