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

标签 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'  => '...'
       )
    )
)

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

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

Mysql错误“Operand should contain 1 column(s)”这意味着我只能选择一列。

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

最佳答案

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

关于一个查询中的 MySQL 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37785847/

相关文章:

php - laravel eloquent 中的一对多关系

iOS Core data如何使用NSPredicate基于一对多子属性查找父对象?

subsonic3 - SubSonic 3 SimpleRepository 一对多

php - 计算每个用户在系统上消耗的时间的有效方法

mysql - 如何将 mysql JDBC 驱动程序添加到 Eclipse 以便它可以被 SQL Explorer 使用?

php - 使用 PHP 从文本文件中读取,添加到 MySQL 数据库问题

java - JPA中的外键约束错误

mysql - 如何让所有孙子处于一对多关系 HQL 中?

php - 如何解决中止连接 mysql?

mysql - 无法在 MAMP 3.5.2 上启动 mySql