如何在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 但它如何像我向您展示的那样存档返回结果格式?
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)
您的输出将在数字数组中。
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