【问题标题】:PHP and MySQL - Is there a way to get embedded/nested objects in response?PHP 和 MySQL - 有没有办法让嵌入式/嵌套对象作为响应?
【发布时间】:2013-03-23 09:38:23
【问题描述】:

我认为 SQL 可能没有这么先进 - 或者可能是 PHP + MySQL 的限制,但请考虑这种情况:

我有一个用户表和一个配置文件表。

我想通过他们的 ID 获取用户。用户表具有对配置文件表的外键引用。我能否以某种方式加入表,以便响应会产生这样的对象:(注意:使用足够的 PHP 这是可行的,但我想将其保留为单个 MySQL 查询)

user_id: 1
username: foo
profile => first_name: Foo
           last_name: Bar
           picture: foo.jpg
email: foo@example.com

这可以在 C# 中使用 LINQ,我只是想知道是否有 PHP 的等价物。

【问题讨论】:

    标签: php mysql oop object nested


    【解决方案1】:

    我认为你需要在这里做一个简单的 JOIN。

    SELECT users.*, profiles.*
    FROM `users`
    LEFT JOIN profiles
    ON users.id = profiles.user_id
    WHERE users.id = '$user_id_var'
    LIMIT 1;
    

    这会将配置文件数据附加到您的用户,但不需要配置文件数据来返回肯定的结果。

    您需要小心考虑冲突键,但此查询应该让您走上正确的道路。

    【讨论】:

    • 嗯,这让我想到了。这不是我想要的(我已经考虑过加入)——因为它将响应变成了一个平面对象,而不是多维的东西。但是,如果我有一个 PHP 类,我可以将配置文件数据与用户数据分开绑定,那么这可能就足够了。如果没有人有更好的解决方案,那么这就是答案。
    • 如果每个用户 id 有多个配置文件,那么您将在 SQL 结果的相邻行中获取它们,但是如果与 id 和配置文件有 1:1 对应关系,那么您的数据已经是平坦的 - 逻辑上 - ;) .
    • 啊,好点子。好吧,我仍然希望它在对象中分开,但我可以在 PHP 中做到这一点。应该使一些非常容易阅读的对象..谢谢。
    • 我不能 100% 确定这是否有意义,而且我确信一些经过认证的 SQL DBA 会想打我,但我相信你将无法完成你的“多仅使用 SQL 生成的“维度”结果。 SQL 将想要返回行,以及我可以放入该行的任何内容。一行中的一列可以包含一个数组/哈希/任何内容,但这将由您的处理器 (PHP/Ruby/Perl) 打包。
    • 我想这就是 NoSQL 的用武之地。不过,这应该适合我的目的。
    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2019-11-09
    • 2017-03-26
    相关资源
    最近更新 更多