繁体   English   中英

如何从表 1 中查询单行和从表 2 中查询多行?

[英]How to query single row from Table 1 and multiple rows from Table 2?

TABLE 1
student_id | name
-----------------
1          | A
2          | B
3          | C

TABLE 2
photo_id   | student_id | path
------------------------------
1          | 1          | /path/to/folder/apple.jpg
2          | 1          | /path/to/folder/orange.jpg
3          | 2          | /path/to/folder/cantaloupe.jpg
4          | 1          | /path/to/folder/lemon.jpg

public function studentPhotos($student_id) {
    $query = "SELECT table1.name,table2.path as photos FROM table1 INNER JOIN table2 ON table1.student_id = table2.student_id WHERE table1.student_id=?";
    $stmt = $this->con->prepare($query);
    $stmt->bind_param("i",$student_id);
    $stmt->execute();
    $stmt->bind_result($name,$photos);
    $student = array();
    while($stmt->fetch()){
        $temp = array(); 
        $temp['name'] = $name;
        $temp['photos'] = $photos;
        $student[] = $temp;
    }
    $stmt->close();
    return $student; 
}

结果:[{A,/path/to/folder/apple.jpg},{A,/path/to/folder/orange.jpg},{A,/path/to/folder/lemon.jpg}]

期望的结果 {A,/path/to/folder/apple.jpg,/path/to/folder/orange.jpg,/path/to/folder/lemon.jpg}

当然,我可以使用 PHP 更改它,但我说的是每个学生都有数百张照片。 因此,对于结果数组中的照片,所有学生的属性都是重复的。

有没有更好的查询方式?

你想在这里分组连接:

SELECT
    t1.name,
    COALESCE(GROUP_CONCAT(t2.path), 'NA') AS paths
FROM table1 t1
LEFT JOIN table2 t2
    ON t1.student_id = t2.student_id
WHERE
    t1.student_id = ?;

您可以使用group_concat方法。 它将为您提供指定列的逗号分隔值。

以下是查询:

SELECT table1.name, 
       Group_concat(table2.path) AS photos 
FROM   table1 
       INNER JOIN table2 
               ON table1.student_id = table2.student_id 
WHERE  table1.student_id =? 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM