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

MySQL one to many relationship in one query

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

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

结果return应该是这样的:

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

我已经尝试使用子查询来 select 结果但不是运气:

SELECT *, (
    SELECT * 
    FROM authors
    WHERE book_id = b.id
) AS authors
FROM book b;

Mysql 错误 "Operand should contain 1 column(s)" 这意味着我只能 select 一栏。

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

SELECT b.*, a.*
FROM book b
INNER JOIN authors a ON (a.book_id = b.id);

从 mysql 开始,您想要数据的方式可能并不容易。 Mysql 将 return 按行排列。所以无论是书籍还是作者都会在结果集中重复。你必须相应地解析 mysql 结果来准备你的数组。

尝试以下操作:

1) 所有作者为逗号分隔 ID 的图书。

"SELECT B.*,group_concat(a.id) as authors 
 From book b inner join authors as a on b.author_id=a.id 
 group by b.id;"

2) 有书籍详细信息的所有作者:

"SELECT A.*,group_concat(B.id) as books 
 From book B inner join authors as A on B.author_id=A.id 
 group by A.id;"
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;

Refer : 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
        )

)

将此数组转换为多维数组

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
                )

        )

)

Refer : https://3v4l.org/q1dli

如果您想快速简单地完成,请使用 GROUP_CONCAT 和适当的分隔符。然后在您的 PHP 应用程序(或您使用的任何语言)中拆分生成的串联字符串字段,以快速获取您想要的内部数组。

这样做的好处是输出中每本书只有一行。