一个查询中的 MySQL 一对多关系

Edw*_*ong 2 mysql one-to-many

如何在ONE查询中获取数据一对多关系?

示例:一本书有很多作者。

结果返回应该是这样的:

array(
   'book_title' => 'HTML for Dummies',
   'book_desc'  => '...',
   'authors' => array(
       [0] => array(
           'name' => 'Someone',
           'dob'  => '...'
       ),
       [1] => array(
           'name' => 'Someone',
           'dob'  => '...'
       )
    )
)
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用子查询来选择结果,但不是运气:

SELECT *, (
    SELECT * 
    FROM authors
    WHERE book_id = b.id
) AS authors
FROM book b;
Run Code Online (Sandbox Code Playgroud)

Mysql 错误“操作数应包含 1 列”,这意味着我只能选择一列。

您可能会建议我使用 join 但它如何像我向您展示的那样存档返回结果格式?

zak*_*ron 6

SELECT 
 B.id AS book_id, B.name AS book_name,
 A.name AS author_name ,A.ID AS author_id 
FROM book B
LEFT JOIN 
 author A ON B.id = A.book_id;
Run Code Online (Sandbox Code Playgroud)

参考:http : //sqlfiddle.com/#!9/633cfa1/2

您的输出将在数字数组中。

Array
(
    [0] => Array
        (
            [bookId] => 1
            [bookName] => Book 1
            [authorId] => 1
            [authorName] => Author 1
        )

    [1] => Array
        (
            [bookId] => 1
            [bookName] => Book 1
            [authorId] => 2
            [authorName] => Author 2
        )

    [2] => Array
        (
            [bookId] => 2
            [bookName] => Book 2
            [authorId] => 3
            [authorName] => Author 3
        )

    [3] => Array
        (
            [bookId] => 3
            [bookName] => Book 3
            [authorId] => 4
            [authorName] => Author 4
        )

)
Run Code Online (Sandbox Code Playgroud)

将此数组转换为多维数组

Array
(
    [0] => Array
        (
            [bookId] => 1
            [bookName] => Book 1
            [authorName] => Array
                (
                    [0] => Author 1
                    [1] => Author 2
                )

        )

    [1] => Array
        (
            [bookId] => 2
            [bookName] => Book 2
            [authorName] => Array
                (
                    [2] => Author 3
                )

        )

    [2] => Array
        (
            [bookId] => 3
            [bookName] => Book 3
            [authorName] => Array
                (
                    [3] => Author 4
                )

        )

)
Run Code Online (Sandbox Code Playgroud)

参考:https : //3v4l.org/q1dli