【问题标题】:How to identify fields from different tables with the same name in a JOIN query result?如何在 JOIN 查询结果中识别不同表中同名的字段?
【发布时间】:2011-04-27 01:02:51
【问题描述】:

我正在 MYSQL 中使用 LEFT JOIN 运行查询以获取用户及其用户组。两个表都有名为 id 的列。我的结果以数组 (PHP) 的形式返回,因此我有一个包含所有字段数据的数组,但也只有一个数组 [“id”]。

这是我目前的查询:

SELECT usr.id, usg.id FROM users usr 左连接 (user_groups usg) 开启 (usg.id=usr.group_id)

现在简单的解决方案是将字段重命名为唯一名称,例如 usr_id 和 usg_id,但我不喜欢这样做。我宁愿让我的值作为 array["usr.id"] 自动返回到数组中。

(我使用的是 CodeIgniter 框架,它会自动完成剩下的工作,但如果只有 MySQL 可以用它返回表别名,我可以在那里重写一些东西)

【问题讨论】:

    标签: php mysql left-join table-alias


    【解决方案1】:

    使用“as”关键字

    select table1.id as table1Id, table2.id as table2Id
    from table1
    join table2
    on somecondition
    

    【讨论】:

    • 我知道这是一个解决方案,但我忘了提到我想避免这种情况,所以它会自动进行
    【解决方案2】:

    只需告诉 mysql 你想使用“as 'newname'”进行动态重命名

    SELECT usr.id as 'user_id', usg.id FROM users usr LEFT JOIN (user_groups usg) ON (usg.id=usr.group_id)
    

    或使用学说本身做 DQR 风格:

    $resultArray = Doctrine_Query::create()
                            ->select('usr.id, usg.id')
                            ->from('users usr')
                            ->leftJoin('usr.user_groups usg')
                            ->setHydrationMode(Doctrine::HYDRATE_ARRAY)
                            ->execute();
    

    这应该返回一个数组,您可以在其中访问两个 ID:

    $resultArr['id']; //for accessing the usr.id
    

    并根据您在用户和用户组之间建立的关联选择其中之一

    $resultArr['user_groups']['id']; //for accessing the usg.id if it is one to one
    $resultArr['user_groups'][0]['id']; //for accessing the usg.id if it is a one to many
    

    【讨论】:

    • 这实际上取决于您如何在用户和 user_groups 之间建立关联
    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多