【发布时间】:2016-06-13 09:13:42
【问题描述】:
如何在 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 *后面有个逗号 -
您希望 SQL 从一个查询中返回嵌套表吗?如果是这样,我想你注定要失望了。单个查询只能返回单个平面表。但是,您可以将表连接起来,然后使用 PHP 将结果处理成所需的数组格式
-
@ADyson 感谢您的建议。我只是想寻找更好的解决方案。
-
@EdwinWong 我同意这令人沮丧。 SQL 在设计时并没有特别考虑 OO 编程。如果您对使用面向对象的方法更内联地存储数据感兴趣,您可能需要考虑使用 NoSQL 类型的数据库而不是 MySQL,例如 MongoDB 或 CouchDB。
-
如果我们想在书籍上做分页器,那么用1个查询可以做到吗?
标签: mysql one-to-many