【问题标题】:Retrieving and formatting all hasMany records in column of a MySQL result检索和格式化 MySQL 结果列中的所有 hasMany 记录
【发布时间】:2012-07-07 10:45:15
【问题描述】:

我不确定这是否可能直接来自 MySQL 查询(之后不处理数据),但我一直在思考一些事情......

假设我们有一张桌子、作者和另一本书。作者可以有很多书,这由 books 表中的 author_id 列指示。

有没有办法执行以下查询:

1) 检索单个作者记录,列名为“books”,其中包含属于作者的书籍记录数组。

2) 相同的结果,但针对数据库中的所有作者。

任何关于这是否可能的意见,任何方法都将不胜感激!

更新

这是第一个查询的所需输出示例:

stdClass Object
(
[id] => 1
[name] => Test Author
[age] => 28
[books] => Array
    (
        [0] => stdClass Object
            (
                [title] => Book 1
                [id] => 1
            )

        [1] => stdClass Object
            (
                [title] => Book 2
                [id] => 2
            )

    )

)

【问题讨论】:

    标签: php mysql sql join has-many


    【解决方案1】:

    1) 是的,GROUP_CONCAT() 可以做到这一点(虽然我不认为这是最好的方法)。

    2) 是的,GROUP BY作者

    【讨论】:

    • 我不相信 GROUP_CONCAT 是我正在寻找的,因为这会将单行连接成一个字符串,现在所有记录都变成一个记录数组 - 检查我的编辑以获取所需结果的示例查询。
    • 您可以在 PHP 中使用 implode() 轻松地将其转换为数组。这是最接近 MySQL 的结果。
    • 我只有一个 id 数组——没有其他书籍信息。我并不乐观我会为这个问题找到一个 MySQL 解决方案,我想我可能必须在执行查询后继续使用 JOINS 和过滤/重组数据。不过感谢您的回答!
    • @Sam,您可以做的是在GROUP_CONCAT 中使用CONCAT 将其他列连接到每个id 上,并由不同于GROUP_CONCAT 的分隔符分隔。然后您可以在GROUP_CONCAT 分隔符上分解每本书,然后在您设置的CONCAT 分隔符上分解书籍的信息。不过,这是一种 hacky 的做事方式,不推荐。
    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 2012-05-02
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多